Skip to main content

Як структуровані рівні в чистій архітектурі?

У Clean Architecture рівні (або шари) вибудувані у концентричні кола, де кожен внутрішній шар незалежний від зовнішнього. Залежності завжди спрямовані всередину - до бізнес-логіки, а не назовні.


1. Entities (Сутності / Domain Layer)

Що це: Ядро системи - бізнес-моделі та правила, що не залежать від технологій.

Містить:

  • бізнес-об'єкти (User, Order, Invoice),
  • інваріанти та бізнес-правила (calculateTotal(), validatePayment()).

Не знає про: фреймворки, бази, інтерфейс, мережу.

Приклад:

python
class Order: def calculate_total(self): return sum(item.price for item in self.items)

2. Use Cases / Application Layer

Що це: Сценарії використання системи - прикладна логіка, як бізнес-правила застосовуються в конкретних процесах.

Містить:

  • інтерактори (CreateOrder, RegisterUser),
  • координатори бізнес-процесів,
  • інтерфейси до репозиторіїв і шлюзів.

Приклад:

python
class CreateOrder: def __init__(self, order_repo, payment_service): ... def execute(self, order_data): order = Order(order_data) order.validate() self.order_repo.save(order)

3. Interface Adapters / Adapter Layer

Що це: Шар, який перетворює дані із зовнішнього світу у формат, зрозумілий бізнес-логіці.

Містить:

  • контролери (REST, gRPC),
  • презентери, серіалізатори,
  • реалізації інтерфейсів репозиторіїв, API тощо.

Приклад:

python
class OrderController: def post(self, request): use_case = CreateOrder(OrderRepo(), PaymentService()) return use_case.execute(request.data)

4. Frameworks & Drivers / Infrastructure Layer

Що це: Найзовнішній шар - конкретні технології та інструменти: фреймворки, бази, UI, API, сервери.

Містить:

  • Django/Spring, PostgreSQL, Redis, Kafka, Flask тощо.
  • інфраструктурні залежності та конфігурації.

5. Правило залежності

Код зовнішнього рівня може знати про внутрішній, але внутрішній рівень ніколи не повинен залежати від зовнішнього.


Підсумок:

Рівні Clean Architecture структуровані від абстрактного до конкретного: Entities → Use Cases → Interface Adapters → Frameworks.

Чим ближче шар до центру, тим стабільніший і довговічніший його код.

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

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

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