Чим Clean Architecture відрізняється від Layered Architecture?
Відмінність Clean Architecture від класичної Layered Architecture (багатошарової архітектури) - не просто в кількості шарів, а в напрямку залежностей, принципах ізоляції логіки і масштабованості проєкту. Нижче - чітке, системне порівняння:
1. Layered Architecture (багатошарова)
Класична схема:
UI → Application → Domain → InfrastructureСуть:
- Програма ділиться на рівні за "технічним" призначенням.
- Залежності спрямовані зверху вниз: UI знає про бізнес-логіку, бізнес-логіка знає про інфраструктуру (наприклад, бази даних).
- Верхні рівні залежать від нижніх.
Головна ідея: Кожен шар відповідає за своє завдання - інтерфейс, бізнес-логіка, доступ до даних, але верхні шари прив'язані до нижніх.
Мінуси:
- Важко тестувати бізнес-логіку без інфраструктури.
- Заміна БД чи фреймворка вимагає каскадних змін.
- З ростом проєкту порушується принцип ізоляції: бізнес-логіка починає "знати" про технології.
2. Clean Architecture (чиста архітектура)
Схема Роберта Мартіна (Uncle Bob):
Entities
Use Cases
Interface Adapters
Frameworks & DriversГоловне правило: Залежності спрямовані всередину - від зовнішнього до внутрішнього. Внутрішні шари не знають про зовнішні.
Ключові принципи:
- Бізнес-правила (Entities, Use Cases) не залежать від UI, БД чи фреймворків.
- Усе зовнішнє (веб, база, API, UI) підключається через інтерфейси та ін'єкцію залежностей.
- Будь-який фреймворк можна замінити, не торкаючись ядра логіки.
Переваги:
- Максимальна тестованість - доменні тести можна запускати без оточення.
- Легка зміна технологій (UI, ORM, API тощо).
- Бізнес-логіка "чиста": у ній немає коду зі світу фреймворків.
3. Ключові відмінності
| Критерій | Layered Architecture | Clean Architecture |
|---|---|---|
| Напрямок залежностей | Зверху вниз (UI → DB) | Всередину (від зовнішнього до ядра) |
| Знання про фреймворки | Усередині бізнес-логіки | Лише на зовнішніх шарах |
| Тестованість | Складна, потребує інфраструктури | Проста, ядро ізольоване |
| Центр системи | Технічні шари (UI, DB) | Бізнес-логіка і use cases |
| Заміна фреймворка | Боляче і дорого | Безболісно |
| Принципи SOLID | Частково | Повною мірою |
| Типова залежність | Domain залежить від Data | Data залежить від Domain |
4. Приклад:
Якщо в Layered Architecture бізнес-логіка викликає репозиторій UserRepository,
то в Clean Architecture бізнес-логіка визначає інтерфейс UserRepository,
а інфраструктура реалізує його.
5. Підсумок:
- Layered - проста, зручна для невеликих застосунків, але крихка при рості.
- Clean - складніша на старті, але масштабується і дозволяє змінювати технології без болю
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.