Skip to content

Laravel: архитектура и прикладные паттерны

Laravel использовал в связке с более строгой прикладной архитектурой, чем классический "fat controller + model".

Что использовал на практике

  • отдельные слои app/Application, app/Domain, app/Infrastructure;
  • use-case ориентированная структура: Command, Query, Handler, Port, DTO, Result;
  • domain-модели и value objects для предметной области;
  • инфраструктурные адаптеры для БД, кэша, очередей и хранения файлов;
  • декораторы над query-handler-ами для кэширования списков рецептов и сохранённых рецептов.

Как это выглядит на практике

Use case слой

В прикладном слое реализованы отдельные сценарии, например:

  • работа с дневным рационом пользователя;
  • экспорт дневного рациона в PDF;
  • чтение списков рецептов и пользовательских сохранений.

Контроллеры при таком подходе остаются точкой входа, а основная логика уходит в handler-классы.

Domain слой

В рабочих проектах выносил отдельные сущности и value objects, например:

  • ExportJob, ExportJobId, ExportJobStatus, ExportJobType;
  • DailyRationAggregate, MealDate, MealType, Portion.

Infrastructure слой

Инфраструктурный слой содержит конкретные реализации портов:

  • Eloquent-репозитории;
  • генерацию PDF (через dompdf);
  • файловое хранение результатов;
  • очередь для фоновой генерации;
  • HTTP-кэширование и invalidation.

Такой подход помогает изолировать Laravel-специфичную инфраструктуру от прикладного кода.

Вывод

Таким образом, работал с архитектурой не только через CRUD и роуты, но и на уровне:

  • проектирования слоистой backend-архитектуры;
  • разделения бизнес-логики и framework-layer;
  • построения расширяемых use-case сценариев;
  • внедрения DDD / Clean Architecture подходов внутри Laravel-приложений.

Сайт обновлен и проверен: