← Усі статті

Прийоми ООП (Design Patterns): словник, а не мета

Вижимка GoF: шаблон як іменоване рішення, Strategy і Observer сьогодні, пастка «втиснути патерн», ШІ та карго-культ — з кейсами та діями на сьогодні.

Прийоми ООП (Design Patterns): словник, а не мета
Зміст

На рев'ю два розробники сперечаються про один клас. Один каже: «тут потрібен Decorator». Інший: «це просто if». Через місяць — три шари обгорток, які ніхто не може прочитати, і баг у порядку викликів. Знайомо?

Design Patterns (GoF, 1994) — не інструкція «встав шаблон у кожен модуль». Це словник для повторюваних проблем проєктування. Нижче — розбір своїми словами: що з книги живе в 2026 році, де стає карго-культом, і як ШІ посилює «pattern soup». Вижимка не замінює оригінал.

Теза книги

Шаблон проєктування — іменоване, перевірене рішення повторюваної проблеми в ООП-системах. GoF дає мову: Strategy, Observer, Factory Method — посилання на структуру та компроміси, не модні слова.

Класична помилка — зубрити 23 шаблони списком. Правильніше — впізнати ситуацію і згадати ім'я ходу.

Ключові ідеї

Шаблон — словник команди, не KPI

Що каже автор. Патерн фіксує проблему, контекст, рішення, наслідки. «Facade» або «Adapter» на рев'ю економить час.

Enterprise. Інтеграція з банком — Adapter з вузьким інтерфейсом замість «обгортка над обгорткою».

Як змінюється з ШІ. Модель генерує AbstractFactory там, де вистачило функції. Просіть: спочатку проблема, потім одне ім'я з GoF, якщо справді потрібно.

Мій досвід. GoF рятує в розмовах між командами. Коли патерн стає метою — книга заважає.

Одна думка: спочатку проблема, потім ім'я з каталогу.

Програмуй на інтерфейс, а не на реалізацію

Залежність від абстракції знижує зв'язність. Notifier замість конкретного SMS-шлюзу — класичний приклад.

ШІ. Інтерфейс на кожен клас — зоопарк. Критерій: дві реалізації або реальна підміна?

Одна думка: інтерфейс там, де завтра буде друга реалізація.

Композиція краща за успадкування

Decorator, Strategy, Bridge — про гнучкість через делегування. Глибокі ієрархії extends — кандидат на рефакторинг.

Посилання: рефactoring Фаулера.

Creational: гнучке створення

Builder, Factory — про варіанти створення. Singleton — червоний прапор у новому коді без вагомої причини.

Behavioral: Strategy і Observer

Strategy замість великого switch. Observer — події, reactive streams; ідея «підписники не знають один одного» лишається.

Structural: Adapter і Facade на межах

Adapter для чужого API. Facade звужує surface, не пробрасывает усе підряд.

На практиці

На рев'ю: проблема до імені патерну? Простіше рішення без нового шару? Hooks і middleware — ті самі ідеї, інший синтаксис.

Ідея Junior Middle Senior
Патерн як словник ★★★★ ★★★★★ ★★★★★
Інтерфейс vs реалізація ★★★★★ ★★★★★ ★★★★
Композиція vs успадкування ★★★★ ★★★★★ ★★★★★
Creational ★★★★ ★★★★★ ★★★★
Behavioral ★★★★ ★★★★★ ★★★★★
Structural ★★★★ ★★★★★ ★★★★★

Обмеження та критика

GoF старіє в прикладах, не в проблемах. Pattern-omania гірша за відсутність каталогу. Порівняння: «Чистий код», Refactoring, DDD.

Читайте GoF як довідник і мову, не 23 галочки в Jira.

Кому читати

Варто — нетривіальні модулі, інтеграції, legacy з Factory/Observer. Вибірково — якщо фреймворк дає все з коробки.

Що зробити сьогодні

  1. Назвіть одну проблему в поточному модулі — один патерн GoF чи простий рефactoring?
  2. Знайдіть один switch за типом — Strategy лише якщо варіантів стане більше.
  3. На рев'ю ШІ-дифа — без нових ієрархій без пояснення проблеми.
  4. Прочитайте одну главу оригіналу (Strategy або Adapter).