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-приложений.