В настоящее время я внедряю сервис-ориентированную архитектуру в Symfony2, и я хотел бы получить наши рекомендации по этому поводу.
Я хочу знать, что мне нужно обрабатывать в контроллере, и что мне нужно обрабатывать в сервисе.
Экстремальным решением было бы передать Request
к сервису, и он будет реализовывать всю логику (в основном Doctrine, так как я разрабатываю API, а не «полный» сайт с Twig, например), а затем отправлять обратно Response
в контроллере.
Это означает, что я должен был бы создать такой код:
В сервисе:
if (null === $entity) {
throw new \Exception('Not found.', self::NOT_FOUND);
}
И в контроллере:
try {
$service->doThings();
}
catch (\Exception $e) {
if ($e->getCode() === Service::NOT_FOUND) {
return new Response($e->getMessage(), 404);
}
}
С потенциально одним условием для каждого исключения, которое я должен бросить.
Это хороший путь? Я совершенно не прав насчет реализации?
Все, что связано с логикой контроллеров (например, принять запрос, ответить на запрос, создать форму, связать параметры, извлечь объект из БД (лучше с ParamConverter), получать и устанавливать объекты сеанса, перенаправления и т. д.) должны храниться в контроллерах.
Все остальное можно перенести в сервисы (или другие классы)
Других решений пока нет …