Я работаю с ASP.NET MVC (и другими веб-реализациями MVC) довольно часто, но в этом я никогда не был уверен: должен ли контроллер и представление взаимодействовать?
Конечно, контроллер должен выбирать, какое представление использовать, но что я имею в виду, должен ли контроллер передавать данные в представление? По моему мнению, если представление ожидает данные от контроллера, то они фактически связаны вместе как пара (контроллер, представление). Вместо этого у меня обычно есть представление, связывающееся с самой моделью и независимое от любого контроллера.
Правильный ли у меня подход, или это тот случай, когда нет единого правильного ответа? Меняется ли ответ при работе в Интернете по сравнению с другими средами? Меняется ли ответ, когда у вас есть концепция строго типизированного представления (как в ASP.NET MVC) или нет?
источник
Ответы:
Контроллер подготавливает данные, которые в дальнейшем будут переданы в представление для рендеринга / отображения. Он также принимает пользовательские входные данные через механизм публикации-подписки или аналогичный. Проверьте первую диаграмму в Википедии или на сайте Мартина Фаулера для получения дополнительной информации о MVC.
Хотя представление обычно принимает данные, в большинстве сред MVC оно не зависит от конкретных контроллеров. Исключениями являются, например, семейство JavaServer Faces. Вообще говоря, фреймворки, такие как Rails, Django или Spring MVC, позволяют отделить представления от контроллеров, передавая данные (контекст, обычно карту / словарь / пакет) в представление (где представление - это реализация шаблона представления шаблона ).
То, является ли ваш язык программирования строго типизированным, не влияет на организацию вашего приложения.
источник
Вопрос, который вы поднимаете, время от времени обсуждается в моей команде. Мы спорим о двух подходах, у которых есть свои минусы и плюсы.
Во-первых, утверждается, что контроллер может обновить представление по следующей схеме. Он слушает как GUI, так и модельные события. Когда происходит событие GUI, оно выполняет требуемое действие в модели, которое, в свою очередь, запускает и событие. Теперь контроллер обычно обновляет представление необходимыми данными.
Второй подход утверждает, что само представление прослушивает события модели и обновляет себя данными, которые либо присоединены к событию, либо путем запроса модели.
При первом подходе вы получаете больше энергии для контроллера, который действительно контролирует все, что происходит в вашем приложении. Возможность решать, каким образом обновлять представление, в зависимости от того, какое событие находится в его руках, и таким образом вы сохраняете свое мнение чистым. Однако, как вы сказали, таким образом у вас есть ваше представление и контроллер связаны.
Во втором вы их отделяете, но ваш взгляд на самом деле контролирует себя каким-то образом.
источник