Назад к вопросам
Junior — Middle
68
Объясните концепцию порта в контексте гексагональной архитектуры и его роль в системе.
Ответ от нейросети
sobes.tech AI
В гексагональной архитектуре (также известной как Ports and Adapters) порт — это абстрактный интерфейс, который определяет, как внешние компоненты (адаптеры) взаимодействуют с ядром приложения (доменной логикой).
Роль порта:
- Определяет контракты для входящих и исходящих взаимодействий.
- Изолирует бизнес-логику от деталей реализации внешних систем (баз данных, UI, API и т.д.).
- Позволяет легко менять внешние компоненты без изменения ядра приложения.
Например, если у вас есть сервис, который должен сохранять данные, порт может быть интерфейсом с методом save(data). Внешний адаптер реализует этот интерфейс, например, сохраняя данные в базу или отправляя их в очередь.
Это обеспечивает гибкость и тестируемость системы, так как можно подменять адаптеры, не затрагивая основную логику.
Пример порта на Python:
from abc import ABC, abstractmethod
class UserRepositoryPort(ABC):
@abstractmethod
def save_user(self, user):
pass
# Адаптер, реализующий порт
class UserRepositoryDB(UserRepositoryPort):
def save_user(self, user):
# код сохранения в базу
pass
# В ядре приложения используем порт, не завися от реализации
class UserService:
def __init__(self, user_repo: UserRepositoryPort):
self.user_repo = user_repo
def register_user(self, user):
self.user_repo.save_user(user)