Должен ли я использовать сервис для каждой функции каждого контроллера или работать с моделями непосредственно в контроллере?

У меня ситуация такого типа, у меня есть контроллеры, например, AuthController с функциями register и login, у меня есть служба под названием AuthService, здесь я реализую функции, в которых у меня есть вся логика и связь с базой данных. все, что я делаю в контроллере, это $ auth_service-> register ($ request), а затем служба аутентификации делает все, возвращает объект ответа, а затем в контроллере я возвращаю этот объект как Json. поэтому у меня нет красноречивых функций в контроллере, нет бизнес-логики, только 3-4 строки кода. Это хорошая практика? например, если мне нужна только функция Modell: all () в контроллере, я должен использовать сервисную функцию даже для этого небольшого куска кода, в противном случае у меня будет структура, в которой я иногда использую сервисы, а иногда нет. Также, когда я внедряю класс обслуживания в контроллер, я также внедряю все полезные модели (иногда другие сервисы) в этот сервис, если в одном контроллере иногда я использую сервис, а иногда работаю с моделями напрямую, то получается, что я внедряю модель в сервис и в контроллере (впрыскивание одной и той же модели два раза). так что я должен продолжать делать это и использовать сервис для каждого контроллера каждой функции? Я имею в виду, какой путь будет лучше и почему?

это функция регистра моего контроллера аутентификации:

protected $auth_service;

public function __construct(AuthService $auth_service){
$this->auth_service  = $auth_service;
}

public function registerUser(UserRegisterRequest $request){
$registerUser = $this->auth_service->registerUser($request);
return response()->json($registerUser, 200);
}

и это контроллер языка:

protected $language;

public function __construct(Language $language){
$this->language = $language;
}

/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$languages = $this->language->getAllLanguage();
return response()->json(['data'=>$languages], 200);
}

во втором примере я использую функцию модели непосредственно из контроллера, но если я выберу этот первый пример лучше, я должен сделать языковой сервис и использовать его в методе индекса языкового контроллера, даже если он довольно прост и не требует каких-либо упрощений, так что же делать ты думаешь?

3

Решение

Хорошо, если вы создаете сервис — тогда я бы сказал, что он больше не MVC, потому что у вас есть один дополнительный слой. Я бы сказал, что правильным способом было бы держать эти строки в контроллере.

Например, среда Symfony больше не является MVC, потому что создание сервисов, которые взаимодействуют с базой данных, а затем внедряет их в контроллер, является традиционным способом работы на данный момент.

Когда эти услуги могут быть полезными?

Хорошо, учтите, что у вас есть несколько контроллеров, для которых вы хотите поделиться бизнес-логикой. Затем вы просто создаете сервис и внедряете этот сервис в несколько контроллеров.

Как вы можете повторно использовать логику с использованием чистого MVC?

Ну, вы можете просто вызвать метод контроллера из другого метода контроллера.

Что я предпочитаю?

Поскольку я работаю в основном с Symfony, мне действительно нравится этот дополнительный уровень обслуживания, потому что

  • код более структурирован
  • Вы можете начать следовать твердым принципам
  • Контроллер не имеет бизнес-логи
  • контроллер связывается только с сервисным уровнем
  • бизнес логика больше не зависит от контроллера
  • бизнес-логику можно легко перенести на любой фреймворк php
  • вы можете внедрять сервисы внутри сервисов и так же использовать логику
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]