Патерни й архітектура на прикладах з PHP
Як влаштований код, з яким ви працюєте щодня, і як писати такий самий. Кожен приклад запускається просто тут.
Виберіть фреймворк, і карта з каталогом покажуть, чим ви вже користуєтесь.
Каталог патернів
Породжувальні
Creational · 2Як створювати обʼєкти так, щоб код не залежав від конкретних класів.
Структурні
Structural · 3Як складати обʼєкти й класи в більші структури.
Поведінкові
Behavioral · 5Як обʼєкти розподіляють обовʼязки й спілкуються.
Різні способи зробити одну справу ховаються за спільним інтерфейсом.
Обʼєкт повідомляє про подію, а хто на неї реагує, він не знає.
Запит проходить ланцюжком обробників, і кожен вирішує: обробити чи передати далі.
Поведінка змінюється разом зі станом обʼєкта, без switch по статусу.
Дія упакована в обʼєкт: її можна поставити в чергу, відкласти чи повторити.
Патерни застосунку
Application · 3Не з книжки GoF, але трапляються в кожному PHP-проєкті.
Від простого до складного
Десять кроків від «де живе логіка» до надійної доставки подій. Кожен наступний спирається на попередній.
-
1КРОК 1MVC і де живе логікачому контролер на 400 рядків
-
2КРОК 2Шариінтерфейс, застосунок, домен, інфраструктура
-
3КРОК 3Value Objectгроші, email, період як значення
-
4КРОК 4Сутність і агрегатмежа, корінь, інваріант
-
5КРОК 5Доменні подіїщо сталося в домені
-
6КРОК 6Bounded contextsодне слово, різні значення
-
7КРОК 7Hexagonalпорти й адаптери
-
8КРОК 8Модульний монолітмодулі з чіткими межами в одному репо
-
9КРОК 9CQRSокремо читати й писати
-
10КРОК 10Outboxнадійна доставка подій
-
1АРХІТЕКТУРАШари і де живе логікаінтерфейс, застосунок, домен, інфраструктура
-
2ТЕСТУВАННЯПерший unit-тест доменутест без бази й фреймворку
-
3АРХІТЕКТУРАValue Objectгроші, email, період як значення
-
4ТЕСТУВАННЯTest doublesdummy, stub, spy, mock, fake
-
5АРХІТЕКТУРАHexagonalпорти й адаптери
-
6ТЕСТУВАННЯФейки адаптерівin-memory замість бази й API
-
7ТЕСТУВАННЯАрхітектурні тестидомен не імпортує Laravel
-
8ТЕСТУВАННЯPHPStan і рівнівід нуля до десяти
-
9АРХІТЕКТУРАМодульний монолітмодулі з чіткими межами в одному репо