Ответ
Гексагональная архитектура (или порты и адаптеры) похожа на многослойную архитектуру, но с акцентом на изоляцию ядра приложения от внешних зависимостей.
- Ядро (доменная логика) — центральный шестиугольник, не зависит от UI, БД или API.
- Порты — интерфейсы для взаимодействия (например,
UserRepository). - Адаптеры — реализации портов (REST API, GraphQL, база данных).
Пример:
// Порт (интерфейс)
interface UserRepository {
getUser(id: string): Promise<User>;
}
// Адаптер (реализация для API)
class ApiUserRepository implements UserRepository {
async getUser(id: string) {
const response = await fetch(`/api/users/${id}`);
return response.json();
}
}
// Ядро (не знает о деталях реализации)
class UserService {
constructor(private repo: UserRepository) {}
async getUser(id: string) {
return this.repo.getUser(id);
}
}
Аналогия: чистый MVC, где модель (ядро) не зависит от контроллеров и представлений (адаптеров).