Могу ли я использовать MVC без геттеров и сеттеров?
Если я не хочу показывать состояние моего объекта, но мне все еще нужно отображать его (скажем, в HTML, XML или JSON), как бы я поступил так в среде MVC. Имеет ли смысл иметь метод экспорта, который экспортирует скрытый неизменный объект ("класс данных", если хотите). Как насчет добавления в метод рендеринга, который говорит с интерфейсом? Есть ли другие подходы к этой проблеме?
2 ответа
Метод рендеринга наиболее близок к отсутствию состояния. Другой метод (хорошо известный пользователям Smarty) заключается в подаче представлений необъектных структур данных для работы.
Однако стоит спросить, в чем заключается проблема, которую решают эти абстракции и / или интерфейс, скрывающий их? Если вы собираетесь делать всю эту работу, IMO, вы должны убедиться, что есть какая-то работа, которая спасет вас.
Точка инкапсуляции скрывает реализацию. Существует "состояние", о котором другие объекты должны знать - иногда целое назначение объекта говорит о таком состоянии.
Например, было бы довольно бесполезно иметь объект "Определенные конечные автоматы", у которого нет метода получения, находится ли он в конечном состоянии или нет. Но, безусловно, полезно инкапсулировать, как эта информация хранится внутри.
Теперь цель методов получения и установки состоит в том, чтобы предоставить интерфейс для свойств состояния объекта, которые могут не иметь никакого отношения к тому, как это на самом деле реализовано. Конечно, в большинстве случаев эти свойства являются полями в объекте, а геттеры и сеттеры - просто пологие оболочки. С другой стороны, у вас есть свобода изменять внутреннюю реализацию, потому что методы получения и установки гарантируют совместимость интерфейса.
Однако, если эти свойства слишком связаны с реальной реализацией, а не с тем, что представляет собой объект, то вам следует рассмотреть возможность удаления таких методов получения и установки.
Сказав все это, если вам нужно что-то отобразить пользователю, то это свойство, о котором другие объекты должны знать. По многим причинам объект не должен заботиться о том, как его отобразить. Одним из них является то, что он не может знать, как он должен отображаться, не зная, как он используется приложением, что заставит ИТ-специалистов слишком много знать о других объектах.