Sobes.tech
Back to questions
Junior — Middle
70

Какие признаки указывают на использование гексагональной архитектуры в коде?

Answer from AI

sobes.tech AI

Гексагональная архитектура (или Ports and Adapters) характеризуется следующими признаками:

  • Чёткое разделение на ядро и внешние интерфейсы. Ядро приложения содержит бизнес-логику и не зависит от внешних систем.
  • Использование портов и адаптеров. Порты — это интерфейсы, через которые ядро взаимодействует с внешним миром, адаптеры — конкретные реализации этих интерфейсов.
  • Отсутствие прямых зависимостей ядра от инфраструктуры. Например, бизнес-логика не зависит от базы данных, UI или сетевых протоколов.
  • Тестируемость. Благодаря изоляции бизнес-логики можно легко писать модульные тесты, подменяя адаптеры моками.

Пример на Python:

from abc import ABC, abstractmethod

# Порт (интерфейс)
class UserRepository(ABC):
    @abstractmethod
    def get_user(self, user_id: int):
        pass

# Ядро приложения
class UserService:
    def __init__(self, user_repo: UserRepository):
        self.user_repo = user_repo

    def get_user_name(self, user_id: int) -> str:
        user = self.user_repo.get_user(user_id)
        return user.name

# Адаптер (конкретная реализация порта)
class InMemoryUserRepository(UserRepository):
    def __init__(self):
        self.users = {1: type('User', (), {'name': 'Alice'})()}

    def get_user(self, user_id: int):
        return self.users.get(user_id)

# Использование
repo = InMemoryUserRepository()
service = UserService(repo)
print(service.get_user_name(1))  # Alice

В этом примере бизнес-логика (UserService) не зависит от конкретной реализации хранилища (InMemoryUserRepository). Это и есть признак гексагональной архитектуры.