middle
Что такое Onion Architecture (луковая архитектура)
Onion Architecture (луковая архитектура) — архитектурный стиль, предложенный Джеффри Палермо, который, как и Clean Architecture, строится на принципе: зависимости направлены только к центру.
Диаграмма слоёв
Пример
┌────────────────────────────────────────────────────┐
│ Infrastructure │
│ (Spring, JPA, REST, Kafka, файловая система) │
│ ┌──────────────────────────────────────────────┐ │
│ │ Application Services │ │
│ │ (Use Cases, оркестрация, DTO) │ │
│ │ ┌────────────────────────────────────────┐ │ │
│ │ │ Domain Services │ │ │
│ │ │ (доменные сервисы, правила) │ │ │
│ │ │ ┌──────────────────────────────────┐ │ │ │
│ │ │ │ Domain Model │ │ │ │
│ │ │ │ (Entities, Value Objects) │ │ │ │
│ │ │ └──────────────────────────────────┘ │ │ │
│ │ └────────────────────────────────────────┘ │ │
│ └──────────────────────────────────────────────┘ │
└────────────────────────────────────────────────────┘
Слои (от центра к периферии)
- Domain Model — сущности, Value Objects, доменные события. Не зависит ни от чего.
- Domain Services — доменная логика, которая не принадлежит конкретной сущности.
- Application Services — координация сценариев, управление транзакциями.
- Infrastructure — реализации репозиториев, внешние сервисы, фреймворки.
Ключевые правила
- Интерфейсы репозиториев определяются в доменном слое.
- Реализации репозиториев находятся в инфраструктурном слое.
- Доменная модель не зависит от фреймворков.
Сравнение Clean, Hexagonal и Onion Architecture
Все три архитектуры преследуют одну цель — изоляция бизнес-логики от инфраструктуры. Различия заключаются в терминологии и акцентах:
| Аспект | Hexagonal | Clean | Onion |
|---|---|---|---|
| Автор | Алистер Кокберн | Роберт Мартин | Джеффри Палермо |
| Акцент | Порты и адаптеры | Правило зависимостей, 4 кольца | Слои вокруг доменной модели |
| Центр | Domain + Application | Entities | Domain Model |
| Кол-во слоёв | 2-3 (ядро, порты, адаптеры) | 4 (Entities, Use Cases, Adapters, Frameworks) | 4 (Domain, Domain Services, App Services, Infra) |
На собеседовании: Интервьюер часто спрашивает Onion вместе с Clean и Hexagonal — важно показать, что вы понимаете их общую идею (инверсия зависимостей) и можете назвать конкретные отличия. Частая ошибка — считать эти три архитектуры совершенно разными подходами, а не вариациями одной идеи.