Поток управления архитектурой MVC

Я немного смущен тем, как три компонента - Модель, Представление, Контроллер - взаимодействуют друг с другом в архитектуре MVC. Иногда мне кажется, что я знаю, как работает MVC, а иногда мне кажется, что я не знаю его внутреннюю работу должным образом.

Что я знаю об архитектуре MVC -

  1. Запросы пользователей перехватываются Контроллером, будь то запрос URL
    или любое событие, вызванное пользователем на странице.
  2. Затем контроллер обрабатывает вводимые пользователем данные и обращается к модели.
  3. Модель подготавливает данные и отправляет обратно контроллеру.
  4. Наконец, контроллер передает данные обратно в представление и отображаются для пользователя.

Здесь, на мой взгляд, View никогда не разговаривает с моделью напрямую. Взаимодействие между представлением и моделью будет обрабатываться только Контроллером.

Все идет нормально!

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

введите описание изображения здесь

Также в этом коде В статье проекта написано, что «модель доступна как для контроллера, так и для представления» и «представление может использовать модель для отображения данных».

Пожалуйста, поясните, доступна ли модель только контроллеру или и контроллеру, и представлению. И если второй тоже правильный, то в какой ситуации это возможно. Я работаю над ASP.NET MVC Framework, и здесь любое взаимодействие осуществляется через объект контроллера. Я никогда не сталкивался с ситуацией, когда представление напрямую разговаривает с объектом модели.


person Tisha Anand    schedule 06.06.2017    source источник
comment
Я почти уверен, что вы можете передать объект модели своему представлению, и оно будет отображать это представление на основе данных в модели. Проверьте это, спуститесь немного вниз к разделу под названием: Использование модели для передачи информации в наше представление docs.microsoft.com/en-us/aspnet/mvc/overview/older-versions/   -  person victor    schedule 06.06.2017


Ответы (2)


Есть MVC, шаблон, и MVC, инфраструктура веб-приложений, разработанная Microsoft и названная в честь шаблона, так что лучше всего разбить эти две части и обсудить отдельно.

В шаблоне MVC вы найдете следующее:

  • Модель - содержит всю бизнес-логику для приложения, включая логику того, как «построить» себя, будь то запросы к базе данных или какой-либо другой метод.
  • Просмотр - предоставляет представление модели для пользовательского интерфейса.
  • Контроллер - подключает модель к виду.

В MVC фреймворк веб-приложений:

  • Модель - нет ни одной. Более уместно, модель, вероятно, представляет собой некоторую комбинацию одного или нескольких классов сущностей, слоя DAL и одной или нескольких моделей представления.
  • Просмотр - почти то же самое, что и MVC, шаблон
  • Контроллер - связывает модель с представлением, но также берет на себя гораздо больше ответственности. Может отвечать за запросы сущностей из базы данных, отображение на модели представления, создание компонентов для представления и т. Д.

Несмотря на название, инфраструктура MVC лишь слабо реализует шаблон MVC. Однако в обоих случаях модель доступна как для контроллера, так и для представления, поэтому ваше фундаментальное понимание ошибочно. Однако в случае фреймворка MVC можно сказать, что для представления доступна только модель представления. Поскольку «Модель» в структуре MVC - это не просто что-то одно, существуют составные части, которые не должны быть доступны для представления, а именно: уровень DAL и, возможно, объект, если только объект не выполняет двойную функцию как модель представления, также.

person Chris Pratt    schedule 06.06.2017
comment
Что касается шаблона MVC, вы упомянули в маркированном списке - представление обеспечивает представление модели для пользовательского интерфейса. И эта модель подключена к представлению контроллером (я полагаю). В последнем абзаце вы упомянули, что и фреймворк, и шаблон имеют доступ к модели. Вы хотите сказать, что представление может получить доступ к модели с помощью контроллера? Если да, то нет прямого доступа к модели через просмотр? - person Tisha Anand; 06.06.2017
comment
Нет. Вид напрямую взаимодействует с моделью. Контроллер передает ему модель, а затем контроллер исчезает из поля зрения. - person Chris Pratt; 06.06.2017
comment
В порядке. Предположим, что существует подробное представление о продукте, и соответствующий контроллер создает объект модели ProductDetail и передает его для рендеринга. В этом случае мы можем сказать, что View взаимодействует с моделью. И если контроллер возвращает только проекцию (ViewModel) объекта Model, то мы можем сказать, что View не взаимодействует напрямую с моделью. Я прав, Крис? - person Tisha Anand; 07.06.2017
comment
Что ж, исходя из этой терминологии, да, но терминология неверна, что я и пытался передать. То, что вы называете моделью, на самом деле является сущностью. Модель big-M в том, что касается представления, - это ваша модель представления. Как я уже сказал, у MVC-фреймворка нет настоящей Модели. В контроллере Модель будет комбинацией сущности, логики, используемой для извлечения этого из базы данных, и модели представления, с которой вы ее сопоставляете. Однако вид видит только часть модели вида. - person Chris Pratt; 07.06.2017
comment
Хорошо. Поскольку Модель содержит данные, а также бизнес-правила, относящиеся к моделируемой бизнес-области. Таким образом, представление может получить доступ к бизнес-правилам, определенным в модели, непосредственно в объекте контроллера. Это то, что вы пытаетесь передать? Если это частично верно, то не могли бы вы привести пример, в котором показано взаимодействие Представления и Модели. - person Tisha Anand; 07.06.2017
comment
Прочитав еще несколько статей на MSDN и Wiki, я получил то, что вы хотели объяснить. Спасибо, Крис. - person Tisha Anand; 08.06.2017

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

Посмотреть => модели

В случае, если представление не является строго типизированным с моделями, мы можем сказать

контроллер => Модели => Представления

person Gaurav Dubey    schedule 07.06.2017