Skip to main content

Чим Clean Architecture відрізняється від Layered Architecture?

Відмінність Clean Architecture від класичної Layered Architecture (багатошарової архітектури) - не просто в кількості шарів, а в напрямку залежностей, принципах ізоляції логіки і масштабованості проєкту. Нижче - чітке, системне порівняння:


1. Layered Architecture (багатошарова)

Класична схема:

javascript
UIApplicationDomainInfrastructure

Суть:

  • Програма ділиться на рівні за "технічним" призначенням.
  • Залежності спрямовані зверху вниз: UI знає про бізнес-логіку, бізнес-логіка знає про інфраструктуру (наприклад, бази даних).
  • Верхні рівні залежать від нижніх.

Головна ідея: Кожен шар відповідає за своє завдання - інтерфейс, бізнес-логіка, доступ до даних, але верхні шари прив'язані до нижніх.

Мінуси:

  • Важко тестувати бізнес-логіку без інфраструктури.
  • Заміна БД чи фреймворка вимагає каскадних змін.
  • З ростом проєкту порушується принцип ізоляції: бізнес-логіка починає "знати" про технології.

2. Clean Architecture (чиста архітектура)

Схема Роберта Мартіна (Uncle Bob):

javascript
Entities Use Cases Interface Adapters Frameworks & Drivers

Головне правило: Залежності спрямовані всередину - від зовнішнього до внутрішнього. Внутрішні шари не знають про зовнішні.

Ключові принципи:

  • Бізнес-правила (Entities, Use Cases) не залежать від UI, БД чи фреймворків.
  • Усе зовнішнє (веб, база, API, UI) підключається через інтерфейси та ін'єкцію залежностей.
  • Будь-який фреймворк можна замінити, не торкаючись ядра логіки.

Переваги:

  • Максимальна тестованість - доменні тести можна запускати без оточення.
  • Легка зміна технологій (UI, ORM, API тощо).
  • Бізнес-логіка "чиста": у ній немає коду зі світу фреймворків.

3. Ключові відмінності

КритерійLayered ArchitectureClean Architecture
Напрямок залежностейЗверху вниз (UI → DB)Всередину (від зовнішнього до ядра)
Знання про фреймворкиУсередині бізнес-логікиЛише на зовнішніх шарах
ТестованістьСкладна, потребує інфраструктуриПроста, ядро ізольоване
Центр системиТехнічні шари (UI, DB)Бізнес-логіка і use cases
Заміна фреймворкаБоляче і дорогоБезболісно
Принципи SOLIDЧастковоПовною мірою
Типова залежністьDomain залежить від DataData залежить від Domain

4. Приклад:

Якщо в Layered Architecture бізнес-логіка викликає репозиторій UserRepository, то в Clean Architecture бізнес-логіка визначає інтерфейс UserRepository, а інфраструктура реалізує його.


5. Підсумок:

  • Layered - проста, зручна для невеликих застосунків, але крихка при рості.
  • Clean - складніша на старті, але масштабується і дозволяє змінювати технології без болю

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.