Назад к вопросам
Junior — Middle
69
Какие признаки указывают на использование гексагональной архитектуры в коде?
Ответ от нейросети
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). Это и есть признак гексагональной архитектуры.