В MVC, каковы ограничения на контроллер? - PullRequest
2 голосов
/ 15 апреля 2009

Должен ли контроллер делать прямые назначения объектам модели или просто сообщать модели, что необходимо сделать?

Ответы [ 4 ]

1 голос
/ 15 апреля 2009

Я не думаю, что контроллер должен иметь дело с модельными объектами.

Я склонен думать, что контроллер действительно является частью уровня пользовательского интерфейса. Я предпочитаю внедрять сервисный слой между контроллером и остальной частью приложения. Веб-уровень принимает HTTP-запросы, отменяет маршализацию параметров из объектов запроса в объекты, с которыми может иметь дело интерфейс службы, и направляет ответ для отправки обратно. Вся работа с транзакциями, единицами работы, а также работа с объектами модели и постоянства выполняется службой.

Этот подход более ориентирован на обслуживание. Он отделяет сервис от пользовательского интерфейса, оставляя открытой возможность того, что несколько клиентов могут повторно использовать один и тот же сервис. Это делает слой, который маршалы запрашивают у сервиса, «тонким», поэтому легко переключать SOAP-сервисы на REST, EJB или CORBA, или как там будет.

1 голос
/ 15 апреля 2009

Это во многом зависит от сферы применения. Если это относительно быстро и грязно, то нет никакого смысла в чрезмерном проектировании, и, конечно, ваши контроллеры могут общаться с объектами вашей модели. С другой стороны, если по какой-либо причине он должен быть более «предприимчивым», хорошим примером для использования в сочетании с MVC является так называемый «Business Delegate». Здесь вы можете составить грубые методы из одного или нескольких методов на одном или нескольких объектах модели; например, удаление объекта, а затем возврат обновленного списка без этого объекта. Этот слой дает два преимущества. Во-первых, он отделяет контроллеры от любой системы ORM, используемой для объектов модели. Кроме того, именно слой, в конечном счете, должен конструктивно иметь дело с любыми исключениями, которые могли произойти, вместо их повторного выброса.

1 голос
/ 15 апреля 2009

Контроллер выполняет две традиционные роли:

  1. обработка события ввода из пользовательского интерфейса (зарегистрированный обработчик или обратный вызов)

  2. уведомление модели действия - что может или не может привести к изменению состояния модели

Он не выполняет проверку данных, то есть модели, и не имеет никакого отношения к представлению информации.

0 голосов
/ 15 апреля 2009

Сервисы модели не должны знать о существовании контроллера, поэтому контроллер может делать то, что нужно представлению, используя сервисы модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...