В каком направлении строятся зависимости между слоями в микросервисной архитектуре?

«В каком направлении строятся зависимости между слоями в микросервисной архитектуре?» — вопрос из категории Архитектура, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В чистой архитектуре микросервисов зависимости строятся по принципу «зависимости направлены внутрь» (Dependency Inward Rule). Это означает:

Направление зависимостей:

Инфраструктурный слой → Слой приложения → Доменный слой
      (внешний)          (промежуточный)      (внутренний)
         ↑                     ↑                    ↑
    Зависит от            Зависит от         НЕ зависит ни от кого

Конкретные примеры для PHP-микросервиса:

  1. Доменный слой (Domain Layer) – содержит бизнес-сущности и правила:

    // Order.php - сущность
    class Order {
    private string $id;
    private float $total;
    private OrderStatus $status;
    
    public function markAsPaid(): void {
        $this->status = OrderStatus::PAID;
    }
    }
  2. Слой приложения (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);
    }
    }
  3. Инфраструктурный слой (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, не затрагивая бизнес-логику
  • Четкое разделение ответственности – каждый слой решает свою задачу

В микросервисной архитектуре этот принцип особенно критичен, так как позволяет независимо развивать и масштабировать отдельные сервисы.