Ответ
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-адаптеров).
- Гибкость: Замена базы данных или фреймворка веб-слоя требует лишь написания нового адаптера, без изменения бизнес-логики.
- Чистота архитектуры: Четкое разделение ответственности.