Какая архитектура использовалась в вашем проекте на Laravel?

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

Ответ

В последнем крупном проекте на Laravel мы использовали расширенную MVC-архитектуру с добавлением слоёв для лучшей поддерживаемости.

Основные компоненты:

  1. Модели (Eloquent) – работа с БД, базовые бизнес-правила.
  2. Контроллеры – тонкий слой для обработки HTTP-запросов и возврата ответов.
  3. Сервисный слой – основная бизнес-логика, вынесенная из контроллеров.
  4. Репозитории – абстракция для работы с данными, инкапсулирующая сложные запросы.
  5. DTO (Data Transfer Objects) – для строгой типизации данных между слоями.
  6. Action-классы – для инкапсуляции отдельных операций (например, CreateOrderAction).

Пример структуры сервиса:

class OrderService
{
    public function __construct(private OrderRepository $orderRepository) {}

    public function createOrder(CreateOrderDto $dto): Order
    {
        // Валидация бизнес-правил
        if ($dto->total <= 0) {
            throw new InvalidOrderException('Order total must be positive.');
        }
        // Создание через репозиторий
        return $this->orderRepository->create($dto->toArray());
    }
}

Для API мы применяли RESTful-подход с использованием:

  • Laravel API Resources для форматирования JSON-ответов.
  • FormRequest-классы для централизованной валидации входящих данных.
  • Модульную организацию по доменам (например, AppDomainsOrder).