Ответ
Clean Architecture (Чистая Архитектура) — это архитектурный подход, предложенный Робертом Мартином, который структурирует приложение в виде концентрических слоёв с чётким правилом зависимостей: внутренние слои не зависят от внешних. Цель — изолировать бизнес-логику и правила предметной области от деталей реализации (UI, базы данных, фреймворков).
Ключевые слои (изнутри наружу):
- Entities (Сущности): Базовые бизнес-объекты и правила, наименее подверженные изменениям (например,
User,Account). - Use Cases (Сценарии использования): Содержат специфичную бизнес-логику приложения. Они оркестрируют поток данных к сущностям и от них.
- Interface Adapters (Адаптеры интерфейсов): Преобразуют данные между форматами, удобными для Use Cases и внешними системами (например, Presenters, Controllers, Gateways).
- Frameworks & Drivers (Фреймворки и драйверы): Внешние инструменты (Spring, Hibernate, Web-сервер, БД). Этот слой меняется чаще всего.
Пример структуры на Java:
// 1. Entity (ядро)
public class User {
private final UserId id;
private final Email email;
// Инварианты и бизнес-логика здесь
}
// 2. Use Case (ядро)
public interface UserRepository {
void save(User user);
}
// 3. Interface Adapter (уровень представления/доступа к данным)
@RestController
public class UserController {
private final CreateUserUseCase useCase; // Зависимость на Use Case (ядро)
@PostMapping("/users")
public void createUser(@RequestBody UserRequest request) {
// ... преобразование DTO, вызов useCase.execute()
}
}
Преимущества:
- Независимость: Бизнес-логика не зависит от фреймворков, БД или UI.
- Тестируемость: Ядро можно тестировать изолированно, без внешних зависимостей.
- Гибкость: Замена внешних компонентов (например, СУБД или веб-фреймворка) требует минимальных изменений в ядре.