Получить доступ

Что такое гексагональная архитектура (порты и адаптеры) и чем она отличается от слоистой?

MiddleМонолит и микросервисы
Ещё спрашивают так:
  • Что такое чистая архитектура?
  • Зачем отделять домен от фреймворка и базы данных?
Коротко

Домен в центре и не зависит ни от чего внешнего. Он объявляет порты — интерфейсы на своём языке: входящие (сценарии использования) и исходящие (OrderRepository, PaymentGateway). Адаптеры снаружи реализуют их: REST-контроллер, JPA-репозиторий, клиент Kafka. Все зависимости направлены внутрь.

  • Слоистая: контроллер → сервис → репозиторий, и бизнес-логика зависит от слоя данных
  • Гексагональная переворачивает эту стрелку через DIP
  • Домен тестируется без БД и фреймворка — подменой адаптеров

А ещё Чистая и луковая архитектуры — варианты той же идеи

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Проблема слоистой архитектуры. Сервис зависит от репозитория, а репозиторий — от ORM. Бизнес-правила обрастают аннотациями JPA, исключениями драйвера, DTO фреймворка. Сменить базу или протестировать логику без неё трудно.

Порты и адаптеры (Алистер Кокберн):

  • домен — сущности и правила, без импорта фреймворков;
  • входящие порты — сценарии: PlaceOrder, CancelOrder;
  • исходящие порты — что домену нужно от мира: Orders, PaymentGateway, Clock;
  • входящие адаптеры вызывают сценарии: REST, консьюмер очереди, CLI, тесты;
  • исходящие адаптеры реализуют исходящие порты: JPA, HTTP-клиент, Kafka-продюсер.
[REST] → PlaceOrder → (домен) → Orders ← [JpaOrders]
                               → PaymentGateway ← [StripeClient]

Плюсы: домен тестируется быстрыми юнит-тестами с фейковыми адаптерами; инфраструктура заменяема; бизнес-код читается без шума.

Цена: больше интерфейсов и маппинга между доменными объектами и сущностями БД; для CRUD без правил это избыточно.

Критерий хорошего порта: он сформулирован в терминах домена — в нём нет слов SQL, JPA, HTTP, Entity.

Что хотят услышать

  • Домен, порты, адаптеры и направление зависимостей.
  • Отличие от слоистой архитектуры.
  • Плюсы и цена, когда избыточно.

Частые ошибки

  • Называть гексагональной архитектурой просто интерфейс над репозиторием Spring Data.

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем