Есть мнение что когда пишется класс нужно большинство свойств сделать приватными, чтобы никто не мог менять внутреннее состояние обектов уменшив таким образом непредсказуемые ситуации. Другие обясняют что состояние объекта это дела объекта (он сам решает как менять). А чтобы влиять на объект можем вызывать его публичные методы, а он изменит (если нужно) состояние.
Но если делать все приватное то у нас не бдет доступа не только на изменение но и на чтение, а это часто нужно. В связи с этим у меня и появился вопрос как быть в такой ситуацией: делать getter-ы (на всех или только некоторые своиства), делать методы которые бы использовали приватные своиства, или делать публичными и оставить ответственность правильного изменения на програмиста?
Пример: есть прямоугольник (Rectangle) которого хотим рисовать на каким нибудь полотном (Canvas)
class Rectangle {
private x, y, w, h: number;
constructor(x, y, w, h: number) {
this.x = x;
this.y = y;
this.w = w;
this.h = h;
}
// ......
}
class Canvas {
private w, h: number;
constructor(w, h: number) {
this.w = w;
this.h = h;
}
public drawRect(rect: Rectangle) {
// Здесь нужны координать и размеры прямоуголника
}
}
const rect = new Rect(0, 0, 10, 15);
const canvas = new Canvas(20, 40);
canvas.drawRect(rect);
В методе drawRect нужны координать и размеры прямоугольника, стоит ли их делать публичными или делать getter-ы для всех этих свойств?
Или может в метод drawRect стойт передовать x, y, w, h и делать еще и метод draw на прямоугольнике
class Rectangle {
private x, y, w, h: number;
constructor(x, y, w, h: number) {
this.x = x;
this.y = y;
this.w = w;
this.h = h;
}
public drawOnCanvas(canvas: Canvas) {
canvas.drawRect(x, y, w, h);
}
}
class Canvas {
private w, h: number;
constructor(w, h: number) {
this.w = w;
this.h = h;
}
public drawRect(x, y, w, h: number) {
// Есть все что нужно для рисования !!!!
}
}
const rect = new Rect(0, 0, 10, 15);
const canvas = new Canvas(20, 40);
rect.drawOnCanvas(canvas);
Ну или все делать публично и использовать то что нужно и когда нужно?