Я читал о том, как сделать мои контроллеры чистыми и простыми, перенеся бизнес-логику на уровень обслуживания. Проблема, с которой я сталкиваюсь, заключается в том, что если я:
Выровняйте уровень обслуживания по моделям, например 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([]);
}
}
Два способа, которые я определила, это то, что я почерпнула из чтения, а также немного собственного мышления. Какой путь масштабируется правильно, и я думаю, что имеет наименьшую жертву?
Задача ещё не решена.
Других решений пока нет …