не уверен, что правильно приоритезировал теги, вопросы достаточно общие. Но интересуют всёже сложившиеся подходы именно в php-проектах и в частности в проектах на Laravel.
Поехали.
В идеальном варианте контроллеры должны быть тонкими, а бизнес логика должна содержаться в сервисном слое. А сами сервисы должны быть максимально независимы от контекста, в котором они вызываются.
$userService->create(...); должен нам создать пользователя хоть мы его вызываем в рамках классического веб-приложения, хоть в апи, хоть в контексте cli.
Но должны ли сервисы содержать методы для чисто read-операций?
Вот метод контроллера:
public function show(Post $post): Response
{
$post->load(); // Подтягиваем какие-то связи
return ...;
}
Мне кажется, делать для этого метод в сервисе будет избыточным.
Но если поместить это в сервис, то открыв класс сервиса, мы увидим вообще все кейсы работы с сущностью "пост", а если писать это в контроллере, то логика уже чуть размазывается по приложению.
Давайте чуть усложним.
Задача: показать пользователю товары из его корзины + пять популярных товаров, которые не пересекаются с товарами, находящимися в корзине.
Тут уже содержится некоторая логика, кроме тупой выборки. Но по своей сути это всё равно два read-запроса.
Должен ли этот функционал находиться в сервисе? Рядом с методами добавления, удаления из корзины. Или же это не область ответственности сервисного слоя?
А вот если нам нужно написать поиск с множеством фильтров, сортировкой и прочим, для этого есть смысл создать некий SearchService, верно?
Следующий момент - использование ADR (action-domain-responder).
И тут уже интересует больше целесообразность такого подхода в laravel-проектах.
С одной стороны, я не вижу никаких препятствий для его использования. Actions - это по сути контроллеры одного действия. Но с другой стороны, те же ресурсные контроллеры - удобная штука. А смешивать особо не хотелось бы.
Но подход ADR привносит большее разделение, что тоже достаточно удобно.
И вопрос, а чем же всё таки являются actions? Это больше контроллеры одного действия, или больше сервисы одного действия? Поскольку в сети мнения на этот счёт расходятся.