Вы находитесь на странице: 1из 9

Clean Architecture

Большой ком грязи - Big Ball of Mud

Код плохо структурирован


Неупорядоченные и циклические
зависимости
Нет явных границ подсистем
Зависимость от деталей
реализации
Неконтролируемая сложность
системы
3 Layer Architecture
User Interface private SqlOrderRepository $orderRepository;
Controller
private CheckoutService $checkoutService;
private Mailer $mailer;

public function checkoutAction(int $orderId)


{
$order = $this->orderRepository->findById($orderId);
Business Rules Service
$this->checkoutService->checkout($order);

$this->mailer->sendInvoice(
$order->getUser(), Invoice::PDF
);
Data Access ORM
}

Бизнес-логика зависит от деталей реализации


Architectural approaches

За последние нескольких десятков лет мы увидели целый ряд идей относительно


архитектуры систем:
● DDD (Domain Driven Design) by Eric Evans
● Hexagonal Architecture (a.k.a. Ports and Adapters) by Alistair Cockburn
● Onion Architecture by Jeffrey Palermo
● DCI (Data, Context and Interaction) from James Coplien, and Trygve Reenskaug
● Object Oriented Software Engineering: A Use-Case Driven Approach by Ivar Jacobson
Architectural approaches

Хотя все эти архитектуры несколько различаются в деталях, они очень похожи.

Все они преследуют одну и ту же цель - разделение интересов.

Все они достигают этого разделения, разделяя программное обеспечение на слои.

У каждого есть по крайней мере один уровень для бизнес-правил и другой для
интерфейсов.
Architectural approaches.
Каждая из этих архитектур создает системы, которые:

Independent of Frameworks. Архитектура не зависит от какого-либо Framework’а или библиотеки.

Testable. Бизнес-правила можно тестировать без UI, базы данных, веб-сервера или любого другого
внешнего элемента.

Independent of UI. UI можно легко изменить, не изменяя остальную часть системы. Веб-интерфейс
можно заменить, например, консольным, без изменения бизнес-правил.

Independent of Database. Вы можете заменить MySQL на Mongo, Oracle или что-то еще. Ваши
бизнес-правила не привязаны к базе данных.

Independent of any external agency. На самом деле ваши бизнес-правила просто ничего не знают о
внешнем мире.
Domain Models, Repository Interfaces,
Domain Services, Domain Events

Presentation
App Services, Commands,
Command Handlers,
Domain Event Handlers,
Application Logic Queries, DTOs
Gateways

Repository and Service Impl.


Domain External Interface Adapters
Logic
Controllers, View Models, Forms,
Filters, Validators

API Gateways

Frameworks, Drivers, DB,


Infrastructure Third-Party Services

External Dependencies
Направление зависимостей
Folder Structure

Бизнес логика/правила
Поведение приложения
Resources

Роберт Мартин

Чистая архитектура. Искусство разработки программного обеспечения

Денис Цветцих

Чистая архитектура на практике. О чем не сказал Дядя Боб?

Kristopher Wilson

The Clean Architecture in PHP

https://github.com/farukh-narzullaev/ecommerce

Вам также может понравиться