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