Как должен выглядеть сервисный уровень веб-приложения MVC?

Я читал о том, как сделать мои контроллеры чистыми и простыми, перенеся бизнес-логику на уровень обслуживания. Проблема, с которой я сталкиваюсь, заключается в том, что если я:

  • Выровняйте уровень обслуживания по моделям, например UserService, AuthenticationService, то это уменьшает избыточность, но также предполагает, что каждый метод UserService, например, update () будет использоваться таким же образом, но бизнес-логика, как мы знаем, различна в разных частях приложения. Методы, которые обслуживают несколько сценариев, обычно являются грязными, потому что если в 3 разных частях приложения используется один и тот же метод, то вы должны удовлетворить все 3 части.

  • Выровняйте уровень обслуживания, чтобы отразить контроллеры и их методы. Этот способ имеет потенциал для увеличения избыточности, но также делает его таким образом, чтобы вы не создавали одиночные методы «золотой пули», которые должны охватывать любой сценарий, который им необходим.

Я показал 2 примера ниже:

Отражающие модели

class UserController extends Controller {
public function update(Request $request){

// Load user service and create history

$user_service = new UserService();
$user_service->update($request);

// Load user history service and create history

$user_history_service = new UserHistoryService();
$user_history_service->createHistory($request);

// json response with success

return response()->json([]);

}
}

Отражающие контроллеры

class UserController extends Controller {
public function update(Request $request){

// Load user controller service, update user and create history
$service = new UserControllerService();
$service->updateUser($request);
$service->createHistory($request);

// return json response with success

return response()->json([]);

}
}

Два способа, которые я определила, это то, что я почерпнула из чтения, а также немного собственного мышления. Какой путь масштабируется правильно, и я думаю, что имеет наименьшую жертву?

3

Решение

Задача ещё не решена.

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

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

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