Back to questions
Senior
161
questionbank
Что такое чистая архитектура?
Sobes Copilot
Get answers in real time
Answer from AI
sobes.tech AI
Чистая архитектура (Clean Architecture) — это набор принципов проектирования программного обеспечения, предложенный Робертом Мартином (Uncle Bob), направленный на создание легко поддерживаемых, тестируемых и гибких систем. Основная идея — разделить систему на слои, где каждый слой зависит только от более внутренних.
Основные принципы:
- Независимость от фреймворков: Система не должна зависеть от какого-либо конкретного фреймворка. Фреймворки должны быть рассматриваться как инструмент, а не основа архитектуры.
- Независимость от тестов: Бизнес-логику можно тестировать без пользовательского интерфейса, базы данных или внешних агентов.
- Независимость от пользовательского интерфейса: Пользовательский интерфейс может легко изменяться без изменения остальной части системы.
- Независимость от базы данных: Вы можете заменить базу данных SQL на NoSQL или файловую систему без изменения бизнес-логики.
- Независимость от внешних агентов: Бизнес-логика не должна зависеть от внешних систем или сервисов.
Архитектура обычно делится на концентрические круги:
- Entities: Самый внутренний слой, содержащий бизнес-правила, которые не зависят от приложения. Это чистые объекты данных и их логика.
- Use Cases (Interactors): Содержит бизнес-правила приложения. Определяют, как сущности взаимодействуют. Они зависят only от сущностей.
- Interface Adapters: Преобразуют данные из форматов, удобных для Use Cases и Entities, в форматы, удобные для самых внешних слоев (например, для базы данных или веб-фреймворка).
- Frameworks & Drivers: Самый внешний слой, содержащий базы данных, веб-фреймворки, UI и другие внешние зависимости.
Правило зависимостей: зависимости могут двигаться только внутрь. Ни один внешний круг не должен зависеть от внутреннего.
Преимущества:
- Улучшенная тестируемость.
- Гибкость и масштабируемость.
- Независимость от технологий.
- Упрощенное понимание бизнес-логики.
Пример структуры директорий в PHP-проекте:
// Корневая директория проекта
src/
Domain/ // Entities
Entity/
Service/ // Бизнес-сервисы, не привязанные к конкретным Use Cases
Application/ // Use Cases
UseCase/
Command/
Query/
// DTO (Data Transfer Objects - для передачи данных между слоями)
DTO/
Infrastructure/ // Interface Adapters + Frameworks & Drivers
Persistence/ // Репозитории, адаптеры БД
Http/ // Контроллеры, Middleware
Cli/ // Консольные команды
// Framework-specific адаптеры (например, для Symfony или Laravel)
Framework/
// Внешние сервисы (API-клиенты)
External/
Presentation/ // UI (например, шаблоны Twig/Blade, если UI часть проекта)
Templates/
config/ // Конфигурационные файлы
public/ // Точка входа (index.php)
tests/
Unit/
Integration/
Functional/
vendor/ // Зависимости Composer