Ответ
Гексагональная архитектура (Ports & Adapters) предполагает разделение кода на три слоя:
- Домен (ядро) - бизнес-логика без зависимостей от внешнего мира.
- Порты - интерфейсы для взаимодействия с внешними системами (API, БД и т.д.).
- Адаптеры - реализация портов для конкретных технологий.
Пример на 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);
}
}
Ключевые принципы:
- Зависимости направлены к ядру
- Внешние системы подключаются через адаптеры
- Легко тестировать (можно подменить адаптеры моками)