2015-07-31 4 views
0

В настоящее время я внедряю сервис-ориентированную архитектуру в Symfony2, и я хотел бы получить наши рекомендации по этому поводу.SOA в 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); 
    } 
} 

С потенциально одним условием для каждого исключения я нужно бросить.

Это хороший способ пойти? Я совершенно не прав в отношении реализации?

+1

не связывают свои услуги на запросы или ответы, это работа контроллера. Для обработки сообщений между службой и контроллером я применяю тот же подход. Самая сложная часть - это документирование всех исключений, которые могут быть выбраны и отслеживания их. – user2268997

+0

Представьте, что вы хотите создать привязку без запроса, долгое время независимо от команды индексирования, все вызовы, которые она может сделать, могут/должны храниться в службе. –

ответ

2

Все, что связано с логикой контроллеров (например, принимает запрос, отвечает на запрос, формирует форму, связывает параметры, извлекает сущность из db (лучше с ParamConverter), получает и устанавливает объекты сеанса, перенаправляет, и т. д.) должны храниться в контроллерах.

Все остальное можно было бы перенести в сферу услуг (или других классов)

+0

Благодарим вас за ответ. Если я хорошо понимаю, извлечение из DB shoud будет в Controller, но сохранение в DB в Service? – theofabry

+1

@ theofabry: все зависит. Я не решаю проблему каждый раз одинаково. Если сохранение объекта в БД также связано с возвратом или чем-то вроде этого, я обычно предпочитаю держать его в контроллере. Если есть тяжелая логика, которая не может быть передана на какой-либо прослушиватель событий или, лучше, на prePersist(), postUpdate() или такой тип обратного вызова, я обычно сохраняю код в сервисах. – DonCallisto

Смежные вопросы