Ответ
Гексагональная архитектура (или порты и адаптеры) предложена Алистером Кокберном в 2005 году. Основная идея — изолировать бизнес-логику от внешних зависимостей (UI, БД, API), сделав приложение легко тестируемым и заменяемым. В центре — доменный слой, а взаимодействие с внешним миром происходит через порты (интерфейсы) и адаптеры (реализации).
Пример:
// Порт (интерфейс)
interface UserRepository {
save(user: User): Promise<void>;
}
// Адаптер (реализация для БД)
class DbUserRepository implements UserRepository {
async save(user: User) {
await db.save(user);
}
}
// Доменный слой использует только порт
class UserService {
constructor(private repo: UserRepository) {}
async register(user: User) {
await this.repo.save(user);
}
}
Ключевые преимущества: гибкость, тестируемость (можно подменить адаптеры на моки), независимость от инфраструктуры.