Что такое гексагональная архитектура
1️⃣ Как кратко ответить
Гексагональная архитектура, также известная как "порт и адаптеры", — это архитектурный стиль, который отделяет бизнес-логику приложения от внешних систем и интерфейсов. Это достигается путем использования портов для определения интерфейсов взаимодействия и адаптеров для их реализации, что позволяет легко заменять или изменять внешние компоненты без влияния на основную логику.
2️⃣ Подробное объяснение темы
Гексагональная архитектура, предложенная Алистером Коберном, представляет собой подход к проектированию программного обеспечения, который фокусируется на отделении бизнес-логики от внешних интерфейсов и инфраструктуры. Это позволяет создавать более гибкие и тестируемые приложения.
Основные концепции
-
Бизнес-логика: Центральная часть приложения, которая содержит основную функциональность и правила. Она не зависит от внешних систем, таких как базы данных, пользовательские интерфейсы или API.
-
Порты: Интерфейсы, которые определяют, как бизнес-логика взаимодействует с внешним миром. Порты могут быть входными (например, для получения данных от пользователя) и выходными (например, для отправки данных в базу данных).
-
Адаптеры: Реализации портов, которые обеспечивают взаимодействие с конкретными внешними системами. Адаптеры могут быть заменены или изменены без влияния на бизнес-логику.
Пример
Рассмотрим пример приложения для управления заказами.
- Бизнес-логика: Управление заказами, включая создание, обновление и удаление заказов.
- Входной порт: Интерфейс, который определяет методы для создания и управления заказами.
- Выходной порт: Интерфейс для взаимодействия с базой данных, например, для сохранения и извлечения данных о заказах.
// Входной порт: интерфейс для управления заказами
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для взаимодействия с базой данных, но не зависит от конкретной реализации хранилища.
Преимущества
- Тестируемость: Бизнес-логику можно тестировать независимо от внешних систем, используя моки или заглушки для портов.
- Гибкость: Легко заменять или изменять адаптеры без изменения бизнес-логики.
- Модульность: Четкое разделение ответственности между бизнес-логикой и внешними системами.
Гексагональная архитектура помогает создавать более устойчивые и адаптируемые приложения, которые легче поддерживать и развивать.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться