Кто несет ответственность за следующий просмотр? - PullRequest
3 голосов
/ 13 сентября 2010

В архетипической архитектуре MVC, куда идет логика, которая определяет, какой вид показывать следующим?

Предполагается, что это некое приложение с несколькими представлениями (окнами), которые могут или не могут отображаться в разное время, в зависимости от действий пользователя.Например, иногда приложению может потребоваться, чтобы пользователь заполнил форму дополнительными сведениями, в других случаях это может быть не так.Обязан ли диспетчер запрашивать, чтобы представление specik стало видимым?

Не думаю ли я, что это неправильно?Может быть, контроллер определяет, какой другой контроллер должен взять на себя управление, и представление просто обновляется в зависимости от того, какой контроллер активен?

Я в замешательстве.

Ответы [ 3 ]

3 голосов
/ 13 сентября 2010

Контроллер является боссом в паттерне MVC.Он отвечает за делегирование, выполняя при этом минимальную работу;).

Приходит запрос, и босс смотрит на него и думает: "Хм ... здесь много работы. Мне нужно получить некоторые данные из моей базы данных. К счастью, у меня есть подчиненные! Эй, модель,подойди сюда. Мне нужно, чтобы ты ушел и взял всю информацию из DAL. "

Думай о модели как о разработчике.Выполняет всю настоящую тяжелую работу, пачкает руки, и без модели вся система рухнет.Он отключается и выполняет всю бизнес-и доменную логику.Затем он бежит обратно к боссу и выполняет всю его тяжелую работу.«Вот, пожалуйста».

Затем босс должен вернуть данные пользователю.Опять же - слишком много работы для него.Таким образом, он получает глупого младшего разработчика, известного как способ сделать это.(Не все юниоры глупы, но это работает для этого примера!).Вид ничего не знает.Неважно, как данные появились, просто они там и работают.Начальник может внести незначительные изменения в данные, поскольку мы не хотим, чтобы представление имело больше ответственности, чем нужно, тогда представление отключается и отображает данные.В зависимости от рабочей нагрузки, начальник может нанять несколько видов для работы.

В основном, контроллер контролирует весь поток в схеме MVC.Он решает, какие модели вызывать, какие представления отображать и какие данные из модели передавать в представление (ViewModels).

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

0 голосов
/ 14 февраля 2012

То, что вы ищете, - это диспетчер рабочих процессов приложений или контроллер приложений.

http://martinfowler.com/eaaCatalog/applicationController.html

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

Скажем, например, у вас есть список контактов и нажмите кнопку «Создать», чтобы создать новый контакт. После успешного завершения сохранения форма создания исчезнет, ​​и вы снова увидите список контактов.

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

Вы можете использовать оператор switch, чтобы определить, что делать дальше, или конечный автомат, или что-то вроде:

Пружинный поток http://www.springsource.org/spring-web-flow

Windows Workflow Foundation http://msdn.microsoft.com/en-us/netframework/aa663328

0 голосов
/ 13 сентября 2010

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

...