Gymterview
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 — важно показать, что вы понимаете их общую идею (инверсия зависимостей) и можете назвать конкретные отличия. Частая ошибка — считать эти три архитектуры совершенно разными подходами, а не вариациями одной идеи.