Какие абстракции предполагает гексагональная архитектура

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

Ответ

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

  1. Домен (ядро) - бизнес-логика без зависимостей от внешнего мира.
  2. Порты - интерфейсы для взаимодействия с внешними системами (API, БД и т.д.).
  3. Адаптеры - реализация портов для конкретных технологий.

Пример на TypeScript:

// Порт (интерфейс)
interface UserRepository {
  save(user: User): Promise<void>;
}

// Адаптер для MongoDB
class MongoUserRepository implements UserRepository {
  async save(user: User) {
    // Реализация для MongoDB
  }
}

// Домен использует только порт
class UserService {
  constructor(private repo: UserRepository) {}

  async register(user: User) {
    // Бизнес-логика
    await this.repo.save(user);
  }
}

Ключевые принципы:

  • Зависимости направлены к ядру
  • Внешние системы подключаются через адаптеры
  • Легко тестировать (можно подменить адаптеры моками)