Ответ
Onion Architecture — это архитектурный паттерн, основанный на принципах чистой архитектуры и зависимостей, направленных внутрь. Бизнес-логика (ядро) изолирована от внешних деталей (UI, БД, фреймворков).
Ключевые слои (от центра к периферии):
- Domain Model (Ядро): Содержит сущности и бизнес-правила. Не зависит ни от чего.
- Application Services (Слой приложения): Оркестрирует выполнение use-cases, координируя домен и внешний мир.
- Infrastructure (Инфраструктура): Реализует технические детали: репозитории (доступ к данным), внешние API, логирование.
- Presentation (Представление): Контроллеры, UI, API-ендпоинты.
Главный принцип: Внешние слои зависят от внутренних, но не наоборот. Это достигается за счёт инверсии зависимостей (DIP).
Пример структуры на Java:
// 1. DOMAIN LAYER (Ядро) - НЕТ зависимостей от фреймворков
public class Order {
private Long id;
private Money total;
public boolean isValid() { /* бизнес-правило */ }
}
public interface OrderRepository { // Абстракция в ядре
Order findById(OrderId id);
}
// 2. APPLICATION LAYER
public class OrderService {
private final OrderRepository repository; // Зависимость от абстракции
public Order getOrder(OrderId id) {
return repository.findById(id);
}
}
// 3. INFRASTRUCTURE LAYER - реализует абстракции ядра
@Repository
public class JpaOrderRepository implements OrderRepository {
@Override
public Order findById(OrderId id) {
// JPA-специфичный код
}
}
Преимущества:
- Тестируемость: Ядро можно тестировать без фреймворков и БД.
- Гибкость: Замена базы данных или UI не затрагивает бизнес-логику.
- Сохранность: Бизнес-правила защищены от изменений во внешних слоях.