Sobes.tech
Back to questions
Junior — Middle
69

Объясните концепцию порта в контексте гексагональной архитектуры и его роль в системе.

Answer from AI

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)