Давайте рассмотрим ваш вопрос в двух:
- Какова роль контроллера в аромате MVC, предлагаемых монорельсовой и ASP.NET MVC?
- Как сопоставление url относится к аппликативным действиям?
Мое взятие на 1:
Поскольку этот тип вопроса поддается многим конфессионально ответов, я считаю, что нет «один способ управлять ими всеми». Теперь в Monorail и ASP.NET MVC (и, конечно же, RoR) контроллер является просто набором действий. Правильный вопрос: «Какова роль действия»?
В моей книге (неписаная книга с монорельсом в действии ... :)) роль Действия состоит в том, чтобы отделить модель домена от презентации как с точки зрения структур данных, так и в вопросах. Все, что специализируется на том, что интерфейс с доменом осуществляется через WEB-запросы, является ответственностью уровня контроллера. Это включает в себя привязку данных и преобразования, связанные с аутентификацией (но не), и принятие решений для шаблонов представления. Таким образом, действие будет принимать параметры из входящего запроса (в сети не проблема с доменом), привяжите их к содержательным данным, которые могут быть отправлены в домен как запрос или команду на языке домена, без cookies, FORM, QueryString и другие «веб-материалы». Он также при просмотре данных преобразует объекты домена, которые были возвращены из Модели, в модель просмотра, которая в той же книге, упомянутой ранее, является моделью, отделенной от модели домена, и отвечает за предоставление представления -template со всеми данными и принятием решения. Так, например, вид не должен запрашивать if (view.User.IsAdmin)
и отображать кнопку «РЕДАКТ», но вместо этого действие Контролера будет отвечать на этот вопрос и предоставит представление с решением, для представления спросить if (view.ShouldRenderEditButton)
So , слой Controllers отделяет проблемы WEB от проблем DOMAIN.
Что касается вопроса нет. 2:
Идея сопоставления URL-адреса как контроллера/действия просто является следствием принятия подхода «Конвенция по конфигурации». Для разработчиков (и потребителей) было бы проще работать со схемой, которая является общей для разных веб-приложений. Сказав это, он не написан на камне, и, как любая конвенция, он является основой для адаптации. Поэтому, если вы создаете веб-сайт, а менеджер продукта запрашивает «красивые URL-адреса», вы просто настраиваете свой механизм маршрутизации соответственно.
Контроллер, как правило, выполняет действия над моделью, где представления имеют тенденцию представлять объекты домена, определенные моделью. Контроллер специально не существует, чтобы стоять между представлением и моделью - если бы это был просто посредник, тогда вы говорите о классической трехуровневой модели, а не MVC. –
Контроллер также проверяет информацию, введенную в систему? –
@ D.Shawley - Я думаю, что вы раскалываете волосы, но вы правы, я не упоминал, что контроллер обновляет модель, а также запрашивает ее. Тем не менее, я бы сказал, что контроллер должен специально стоять между моделью и представлением, так как вполне возможно, что модель и представление свяжутся напрямую. Причина, по которой вы не хотите, это поддерживать де-мутацию. Де-связь возникает из-за реализации контроллера (модератора). – ennuikiller