Я прочитал несколько статей / постов, касающихся использования геттеров и сеттеров, и того, как они помогают победить цель инкапсуляции в объектах модели предметной области. Я понимаю логику отказа от использования сеттеров - вы позволяете клиентскому коду манипулировать атрибутами этого объекта вне контекста бизнес-правил и инвариантов объекта.
Теперь этот принцип все еще смущает меня. Например, что произойдет, если мне нужно изменить значение переменной-члена объекта? Например, если имя человека меняется, как я могу отразить это в модели? Сначала я подумал: ну почему бы не иметь функцию с именем «ChangeName», которая позволяет мне передать новое имя, и она, в свою очередь, может изменить внутреннюю переменную «name». Ну ... это просто сеттер, не так ли?
Что мне нужно уточнить - если бы мне пришлось полностью исключить сеттеры, то в ситуациях, подобных описанным выше, я должен полагаться исключительно на параметры конструктора? Должен ли я передать новое значение атрибута вместо старого значения атрибута через конструктор, после чего я смогу сохранить изменения, передав объект в любую имеющуюся у меня инфраструктуру сохранения?
Эти две статьи полезны в этом обсуждении:
- http://kellabyte.com/tag/ddd/
- http://typicalprogrammer.com/?p=23