Я давно работаю разработчиком (мне 49 лет), но я довольно новичок в объектно-ориентированной разработке. Я читал об ОО со времен Эйфеля Бертранда Мейера, но мало занимался программированием.
Дело в том, что каждая книга по ОО-дизайну начинается с примера лодки, автомобиля или какого-либо обычного объекта, который мы часто используем, и они начинают добавлять атрибуты и методы, а также объясняют, как они моделируют состояние объекта и что можно сделать с помощью Это.
Таким образом, они обычно выглядят так: «чем лучше модель, тем лучше она представляет объект в приложении и тем лучше все получается».
Пока все хорошо, но, с другой стороны, я нашел несколько авторов, которые дают рецепты, такие как «класс должен умещаться всего на одной странице» (я бы добавил «на каком размере монитора?», Теперь, когда мы пытаемся не напечатать код!).
Возьмем, к примеру, PurchaseOrder
класс с конечным автоматом, управляющим его поведением, и коллекцией PurchaseOrderItem
, одним из аргументов которого здесь является то, что мы должны использовать PurchaseOrder
простой класс с некоторыми методами (немного больше, чем класс данных), и иметь PurchaseOrderFSM
«эксперт класс» , который обрабатывает конечный автомат для PurchaseOrder
.
Я бы сказал, что подпадает под классификацию «Зависть к особенностям» или «Неприемлемая близость» поста Джеффа Этвуда « Запахи кода» на тему «Кодирующий ужас». Я бы назвал это здравым смыслом. Если я могу оформить, утвердить или отменить свой заказ в режиме реальной покупки, то PurchaseOrder
класс должен иметь issuePO
, approvePO
и cancelPO
методу.
Разве это не идет с принципами «максимизировать сплоченность» и «минимизировать сцепление», которые я понимаю как краеугольные камни ОО?
Кроме того, разве это не помогает в обслуживании класса?
PurchaseOrder
, вы могли бы просто назвать свои методыissue
,approve
иcancel
.PO
Суффикс добавляет только отрицательное значение.