Як структуровані рівні в чистій архітектурі?
У Clean Architecture рівні (або шари) вибудувані у концентричні кола, де кожен внутрішній шар незалежний від зовнішнього. Залежності завжди спрямовані всередину - до бізнес-логіки, а не назовні.
1. Entities (Сутності / Domain Layer)
Що це: Ядро системи - бізнес-моделі та правила, що не залежать від технологій.
Містить:
- бізнес-об'єкти (
User,Order,Invoice), - інваріанти та бізнес-правила (
calculateTotal(),validatePayment()).
Не знає про: фреймворки, бази, інтерфейс, мережу.
Приклад:
class Order:
def calculate_total(self):
return sum(item.price for item in self.items)2. Use Cases / Application Layer
Що це: Сценарії використання системи - прикладна логіка, як бізнес-правила застосовуються в конкретних процесах.
Містить:
- інтерактори (
CreateOrder,RegisterUser), - координатори бізнес-процесів,
- інтерфейси до репозиторіїв і шлюзів.
Приклад:
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 тощо.
Приклад:
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.
Чим ближче шар до центру, тим стабільніший і довговічніший його код.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.