Я прочитал несколько статей / сообщений об использовании геттеров и сеттеров и о том, как они помогают преодолеть цель инкапсуляции в объектах модели предметной области. Я понимаю логику отказа от использования сеттеров - вы позволяете клиентскому коду манипулировать атрибутами этого объекта вне контекста бизнес-правил и инвариантов объекта.
Но этот принцип меня все еще смущает. Например, что произойдет, если мне нужно изменить значение переменной-члена объекта? Например, если имя человека меняется, как я могу отразить это в модели? Сначала я подумал, а почему бы не иметь функцию с именем «ChangeName», которая позволяет мне передать новое имя, а она, в свою очередь, может изменить внутреннюю переменную «name». Ну .... это же сеттер, не так ли!
Что мне нужно прояснить - если бы я полностью исключил сеттеры, то в подобных ситуациях я должен был бы полагаться исключительно на параметры конструктора? Должен ли я передавать новое значение атрибута вместо старого значения атрибута через конструктор, после чего я могу сохранить изменения, передав объект в любую имеющуюся у меня инфраструктуру сохранения?
Эти две статьи полезны в этом обсуждении: