Laravel. Какой функционал следует выносить в сервисы?
Есть методы, которые создают новые записи в базе, скачивают информацию с внешнего источника, обрабатывают загруженный на сервер файл. Сейчас все это лежит в контроллерах.
Правильно ли я сделаю, если вынесу все это в сервисы? То есть контроллеры получатся максимально тонкими и по сути будут в большинстве случаев по условию вызывать нужные сервисы, модели хранить информацию о связях/полях и тп, а вся работа будет выполнятся в сервисах.
Таких сервисов получится довольно много. Это правильный подход?
Есть хорошее правило - в любой непонятной ситуации создавай новый сервис. Здесь главное чувствовать границу разумного, чтобы не получился слишком уж слоёный пирог. Кстати, сам контроллер тоже нужно воспринимать как сервис.
WebDev: Ds j kfhjdtkjdcrjv https://laravel.com/docs/master/providers? Нет, сей сервис провайдер это сервис для регистрации других сервисов. Он инициализирует их, добавляет в контейнеры для DI, подключает дополтильные файлы и т.д.
Вот допустим в вашем кейсе вы делаете сервис который обрабатывает загруженные файлы UploaderService. На вход передаёте ему нужные данные вроде списка файлов и нужный конфиг. В этом сервисе может быть проблема что файлы хранятся в разных стораджах (файлы на локале или облака со своим апи), в таком случае нужно лепить ещё один сервис, который отвечает за хранение файлов и взаимодействует с нужным апи (FileStorageService, ASWStorageService).
Соответственно у вас будет сервис провайдер, который инициализирует UploaderService и передаёт ему нужный *StorageService плюс обычно кусок конфига для данных сервисов.