← Назад ко всем вопросам

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

1️⃣ Как кратко ответить

Гексагональная архитектура, также известная как "порт и адаптеры", — это архитектурный стиль, который отделяет бизнес-логику приложения от внешних систем и интерфейсов. Это достигается путем использования портов для определения интерфейсов взаимодействия и адаптеров для их реализации, что позволяет легко заменять или изменять внешние компоненты без влияния на основную логику.

2️⃣ Подробное объяснение темы

Гексагональная архитектура, предложенная Алистером Коберном, представляет собой подход к проектированию программного обеспечения, который фокусируется на отделении бизнес-логики от внешних интерфейсов и инфраструктуры. Это позволяет создавать более гибкие и тестируемые приложения.

Основные концепции

  1. Бизнес-логика: Центральная часть приложения, которая содержит основную функциональность и правила. Она не зависит от внешних систем, таких как базы данных, пользовательские интерфейсы или API.

  2. Порты: Интерфейсы, которые определяют, как бизнес-логика взаимодействует с внешним миром. Порты могут быть входными (например, для получения данных от пользователя) и выходными (например, для отправки данных в базу данных).

  3. Адаптеры: Реализации портов, которые обеспечивают взаимодействие с конкретными внешними системами. Адаптеры могут быть заменены или изменены без влияния на бизнес-логику.

Пример

Рассмотрим пример приложения для управления заказами.

  • Бизнес-логика: Управление заказами, включая создание, обновление и удаление заказов.
  • Входной порт: Интерфейс, который определяет методы для создания и управления заказами.
  • Выходной порт: Интерфейс для взаимодействия с базой данных, например, для сохранения и извлечения данных о заказах.
// Входной порт: интерфейс для управления заказами
public interface OrderService {
    void createOrder(Order order);
    Order getOrderById(String orderId);
}
  • OrderService: Интерфейс, который определяет методы для создания и получения заказов. Это входной порт, который будет использоваться для взаимодействия с бизнес-логикой.
// Выходной порт: интерфейс для взаимодействия с базой данных
public interface OrderRepository {
    void save(Order order);
    Order findById(String orderId);
}
  • OrderRepository: Интерфейс, который определяет методы для сохранения и извлечения заказов из базы данных. Это выходной порт, который будет использоваться для взаимодействия с хранилищем данных.
// Реализация бизнес-логики
public class OrderServiceImpl implements OrderService {
    private final OrderRepository orderRepository;
​
    public OrderServiceImpl(OrderRepository orderRepository) {
        this.orderRepository = orderRepository;
    }
​
    @Override
    public void createOrder(Order order) {
        // Бизнес-логика для создания заказа
        orderRepository.save(order);
    }
​
    @Override
    public Order getOrderById(String orderId) {
        // Бизнес-логика для получения заказа по ID
        return orderRepository.findById(orderId);
    }
}
  • OrderServiceImpl: Класс, реализующий бизнес-логику. Он использует OrderRepository для взаимодействия с базой данных, но не зависит от конкретной реализации хранилища.

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

  • Тестируемость: Бизнес-логику можно тестировать независимо от внешних систем, используя моки или заглушки для портов.
  • Гибкость: Легко заменять или изменять адаптеры без изменения бизнес-логики.
  • Модульность: Четкое разделение ответственности между бизнес-логикой и внешними системами.

Гексагональная архитектура помогает создавать более устойчивые и адаптируемые приложения, которые легче поддерживать и развивать.

Тема: Паттерны/SOLID
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки