Работал ли с гексагональной архитектурой

«Работал ли с гексагональной архитектурой» — вопрос из категории Архитектура, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, работал. Гексагональная архитектура (ports & adapters) помогает изолировать бизнес-логику от внешних зависимостей (БД, API и т.д.). В Go это часто реализуется через интерфейсы и dependency injection.

Пример:

// Порты (интерфейсы)
type UserRepository interface {
    Save(user User) error
}

// Адаптер для БД
type PostgresUserRepository struct {
    db *sql.DB
}

func (r *PostgresUserRepository) Save(user User) error {
    // Реализация сохранения в Postgres
}

// Ядро (бизнес-логика)
type UserService struct {
    repo UserRepository
}

func (s *UserService) Register(user User) error {
    // Валидация и бизнес-правила
    return s.repo.Save(user)
}

Плюсы: тестируемость (можно подменить адаптеры на моки), гибкость, независимость от инфраструктуры. Минусы: больше boilerplate кода, сложнее для простых проектов.