Ответ
Onion архитектура — это подход к проектированию приложений, где зависимости направлены внутрь, к ядру системы. В центре находится доменный слой (бизнес-логика), который не зависит от внешних слоёв (инфраструктура, UI, БД).
Основные слои:
- Домен — чистые модели и бизнес-правила.
- Приложение — сценарии использования (use cases).
- Инфраструктура — реализация репозиториев, внешних сервисов.
- UI/API — контроллеры, HTTP-обработчики.
// Пример интерфейса репозитория в доменном слое
type UserRepository interface {
FindByID(id int) (*User, error)
}
// Реализация в инфраструктурном слое
type PostgreSQLUserRepo struct { db *sql.DB }
func (r *PostgreSQLUserRepo) FindByID(id int) (*User, error) {
// Запрос к БД
}
Плюсы:
- Тестируемость (можно мокать зависимости).
- Гибкость (замена инфраструктуры без изменения домена).
- Чистота архитектуры.
Минусы:
- Сложность для маленьких проектов.
- Больше boilerplate-кода.