Senior
78
questionbank

Что такое чистая архитектура?

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

Чистая архитектура (Clean Architecture) — это набор принципов проектирования программного обеспечения, предложенный Робертом Мартином (Uncle Bob), направленный на создание легко поддерживаемых, тестируемых и гибких систем. Основная идея — разделить систему на слои, где каждый слой зависит только от более внутренних.

Основные принципы:

  • Независимость от фреймворков: Система не должна зависеть от какого-либо конкретного фреймворка. Фреймворки должны быть рассматриваться как инструмент, а не основа архитектуры.
  • Независимость от тестов: Бизнес-логику можно тестировать без пользовательского интерфейса, базы данных или внешних агентов.
  • Независимость от пользовательского интерфейса: Пользовательский интерфейс может легко изменяться без изменения остальной части системы.
  • Независимость от базы данных: Вы можете заменить базу данных SQL на NoSQL или файловую систему без изменения бизнес-логики.
  • Независимость от внешних агентов: Бизнес-логика не должна зависеть от внешних систем или сервисов.

Архитектура обычно делится на концентрические круги:

  1. Entities: Самый внутренний слой, содержащий бизнес-правила, которые не зависят от приложения. Это чистые объекты данных и их логика.
  2. Use Cases (Interactors): Содержит бизнес-правила приложения. Определяют, как сущности взаимодействуют. Они зависят only от сущностей.
  3. Interface Adapters: Преобразуют данные из форматов, удобных для Use Cases и Entities, в форматы, удобные для самых внешних слоев (например, для базы данных или веб-фреймворка).
  4. Frameworks & Drivers: Самый внешний слой, содержащий базы данных, веб-фреймворки, UI и другие внешние зависимости.

Правило зависимостей: зависимости могут двигаться только внутрь. Ни один внешний круг не должен зависеть от внутреннего.

Преимущества:

  • Улучшенная тестируемость.
  • Гибкость и масштабируемость.
  • Независимость от технологий.
  • Упрощенное понимание бизнес-логики.

Пример структуры директорий в PHP-проекте:

plaintext