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