Ответ
В чистой архитектуре микросервисов зависимости строятся по принципу «зависимости направлены внутрь» (Dependency Inward Rule). Это означает:
Направление зависимостей:
Инфраструктурный слой → Слой приложения → Доменный слой
(внешний) (промежуточный) (внутренний)
↑ ↑ ↑
Зависит от Зависит от НЕ зависит ни от кого
Конкретные примеры для PHP-микросервиса:
-
Доменный слой (Domain Layer) – содержит бизнес-сущности и правила:
// Order.php - сущность class Order { private string $id; private float $total; private OrderStatus $status; public function markAsPaid(): void { $this->status = OrderStatus::PAID; } } -
Слой приложения (Application Layer) – содержит use cases:
// PayOrderHandler.php class PayOrderHandler { public function __construct( private OrderRepositoryInterface $repository ) {} public function handle(PayOrderCommand $command): void { $order = $this->repository->find($command->orderId); $order->markAsPaid(); $this->repository->save($order); } } -
Инфраструктурный слой (Infrastructure Layer) – реализует интерфейсы:
// DoctrineOrderRepository.php class DoctrineOrderRepository implements OrderRepositoryInterface { public function __construct(private EntityManagerInterface $em) {} public function find(string $id): ?Order { return $this->em->find(Order::class, $id); } }
Почему это важно:
- Доменный слой не зависит от фреймворков, БД или внешних сервисов – его можно тестировать изолированно
- Легко менять инфраструктуру – заменить Doctrine на Eloquent, REST на GraphQL, не затрагивая бизнес-логику
- Четкое разделение ответственности – каждый слой решает свою задачу
В микросервисной архитектуре этот принцип особенно критичен, так как позволяет независимо развивать и масштабировать отдельные сервисы.