Я недавно начал работать на Java и познакомился с диким и безумным миром геттеров и сеттеров для всего. Сначала я ненавидел это, но быстро привык. Слишком привык.
В последнее время я трачу много времени на размышления о дизайне классов. Одна из вещей, которые я пытаюсь сделать, - это избегать ловушек, связанных с добычей и установкой всего. Однако большая часть работы, которую я выполняю, связана с сущностями, которые в основном являются контейнерами данных, и я не уверен, что геттеры и сеттеры на самом деле неуместны в этих случаях.
Вот простой пример использования открытых свойств.
class Space {
public String name;
public String description;
Space(final String name, final String description) {
this.name = name;
this.description = description;
}
}
Вот простой пример использования частных свойств и использования методов получения и установки.
class Space {
private String name;
private String description;
Space(final String name, final String description) {
this.name = name;
this.description = description;
}
public String getName() {
return this.name;
}
public void setName(final String name) {
this.name = name;
}
public String getDescription() {
return this.description;
}
public void setDescription(final String description) {
this.description = description;
}
}
В этих примерах поля name
и description
должны быть изменены.
Мне кажется, что пример получения / установки более понятен и скрывает детали реализации того, что есть name
и description
. Это также позволило бы проверить правильность установки позже, если это необходимо.
Я читал несколько дискуссий о том, что геттеры и сеттеры являются злыми и / или анти-паттернами, но на самом деле такое чувство, что они могут не относиться к этой ситуации.
Возможно, есть варианты, которые я еще не рассматривал. Я открыт для предложений!