Находится ли сервисный уровень между контроллером и моделью (сопоставителем)?

Я обнаружил, что мне нужно перенести некоторые функции на сервисный уровень. В данном конкретном случае это относится к примеру относительно zend-paginator.

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

Хотя это вызывает у меня несколько вопросов.

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

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

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

Использование его для некоторых задач, похоже, усложнит ситуацию позже, в то время как использование его в качестве прокси-сервера похоже на то, что мы намеренно вводим репликацию и сложность кода.

Любое разъяснение по «наилучшей практике» было бы очень полезным.


person Stryks    schedule 16.04.2012    source источник


Ответы (1)


Перемещение кода в контроллер приводит к толстому контроллеру. Он тесно связывает приложение с пользовательским интерфейсом. Это затрудняет выполнение этого действия в другом контексте. Тонкий контроллер обрабатывает запросы в определенном контексте, используя одну или несколько служб для генерации ответа.

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

Например, контроллер взаимодействует с сервисным уровнем в приложении MVC. Консольная оболочка может взаимодействовать с сервисным уровнем в cli. Сервер SOAP или JSON-RPC может использовать отражение, чтобы представить службу как API веб-службы. Все это можно сделать без дублирования кода.

person user934258    schedule 17.04.2012
comment
Спасибо за ответ. Исходя из вашего поста, предположительно количество логики, содержащейся в сервисном уровне, и требования к взаимодействию приложения определяют потребность в сервисном уровне. Кроме того, предполагается, что как только сервисный уровень создан, все взаимодействие с моделью проходит через него. Я правильно это понимаю? - person Stryks; 17.04.2012