Что такое Hexagon (гексагональная архитектура)?

«Что такое Hexagon (гексагональная архитектура)?» — вопрос из категории Архитектура, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Hexagon (Гексагональная архитектура, или "Порты и адаптеры") — это архитектурный паттерн, цель которого — изолировать бизнес-логику (ядро) приложения от внешних зависимостей (база данных, UI, внешние API).

Ключевые компоненты:

  • Ядро (Domain): Содержит бизнес-правила и логику. Не зависит ни от чего внешнего.
  • Порты (Ports): Интерфейсы, определяющие, как ядро может взаимодействовать с внешним миром (ввод/вывод).
  • Адаптеры (Adapters): Реализации портов, которые преобразуют данные из внешних форматов (HTTP, SQL) в формат, понятный ядру, и наоборот.

Пример на Java:

// ПОРТ: Интерфейс, объявленный в ядре
public interface OrderRepository {
    void save(Order order);
}

// АДАПТЕР: Реализация порта для конкретной БД (находится "снаружи")
public class PostgresOrderAdapter implements OrderRepository {
    @Override
    public void save(Order order) {
        // Преобразует объект Order в SQL-запрос и выполняет его
    }
}

// ЯДРО: Доменный сервис, который зависит только от порта (интерфейса)
public class OrderService {
    private final OrderRepository repository;

    public OrderService(OrderRepository repository) { // Dependency Injection
        this.repository = repository;
    }

    public void createOrder(Order order) {
        // Бизнес-логика
        repository.save(order); // Использует порт, не зная об адаптере
    }
}

Преимущества:

  • Тестируемость: Ядро можно тестировать с помощью заглушек (mock-адаптеров).
  • Гибкость: Замена базы данных или фреймворка веб-слоя требует лишь написания нового адаптера, без изменения бизнес-логики.
  • Чистота архитектуры: Четкое разделение ответственности.