Я хочу использовать сервисный слой.но есть несколько вопросов.Я приведу примеры и давайте обсудим это.
Допустим, что в функции хранилища контроллеров я написал плохой код, такой как у меня там проверка, у меня также есть модель, дайте ввод этой модели пользователюатрибуты и хранить его.в основном у меня все в контроллере, что приводит к жирным контроллерам.Теперь мы можем сделать две вещи, чтобы решить эту проблему.
1) переместить логику валидации в класс валидации (легко), где мы создадим новый экземпляр модели и установим для него атрибуты и сохраним его в базе данных (чтологика теперь в контроллере, но мы возьмем это к модели).так что всякий раз, когда нам нужно использовать ту же вещь в другом месте, мы можем вызвать функцию этой модели.если бы мы этого не сделали, мы бы повторяли эту логику снова и снова.как насчет бизнес-логики?давайте возьмем бизнес-логику на сервисном уровне.после этого наш контроллер будет выглядеть следующим образом:
public function store(Request $request)
{
DB::beginTransaction();
try{
$results = $this->transport_service->doLogic($request); //makes logic according to user data.
if($results) {
$storeData = Transport::storeTransportThisWay($results, $request); //then we use model's function..
}
DB::commit();
return response()->json(['success'=>'Transport type has been binded to column and its values successfully'], 200);
}catch(\Exception $e){
DB::rollback();
return response()->json(['error'=>'Something went wrong, please try later.'], 500);
}
}
, поэтому в принципе я пишу любые запросы в модели.и любая бизнес-логика в сервисе.
Первый вопрос: хороший ли это подход?
2) что мы можем сделать, это в контроллере, давайтевызов метода сервиса, в котором мы пишем запрос, а также бизнес-логику.Это способ, которым все пользуются.но вопрос в том, следую ли я этому подходу, скажем, в одном из методов службы я написал запрос и бизнес-логику.все работает хорошо.но, скажем, в другом я также должен иметь тот же запрос, но мне не нужна эта бизнес-логика.Дело в том, что я не могу использовать метод этого сервиса, потому что он имеет и бизнес-логику, и запрос, а мне нужен только запрос.Так что дело в том, что я также должен поместить запрос куда-то еще, но не в метод сервиса, который дает нам другой вопрос, куда поместить этот запрос. Я прав?если да, мой вопрос: почему людям нравится такой подход и почему не первый, который я упомянул?
Хороший пример будет высоко оценен.