ASP.NET терминология MVC сбивает меня с толку - почему 'ViewModel'?

Я - новичок MVC ASP.NET, но использовал много платформ Образцового Контроллера Представления ранее.

Я недавно столкнулся с конвенцией собирания частей данных, в которых нуждается Ваше конкретное представление (действительно, это присвоено ViewData) в новый класс по имени ViewModel (NameOfView).

Собирание этих данных так, чтобы это было связано с функциями, обеспеченными взаимодействием Представления/Контроллера, кажется мне структурой помощника, или даже механизм закрытия (в 'инкапсулирует набор переменных' смысл).

Итак, почему это называют 'ViewModel', учитывая, что это ни один Представление или Модель?

Кто-либо еще находит имя сбивающим с толку?

Править: Что случилось только с помещением свойств на Представление так, чтобы Контроллер мог заполнить их (как в других платформах MVC)?

7
задан JBRWilkinson 19 January 2010 в 18:47
поделиться

4 ответа

Модель представляет собой представление агностического представления данных. Модель View - это специфическое представление о просмотре данных: это модель , поскольку она может появиться из данного View .

Рассмотрим модель, которая состоит из необработанных точек данных; Взгляд гистограммы может затем иметь модель просмотра, состоящей из набора ведер и итогов, вытянутых из этих данных.

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

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

10
ответ дан 6 December 2019 в 07:50
поделиться

В моем чтении на этой теме я столкнулся с различными аргументами относительно того, почему разработчик будет или не хотела бы использовать ViewModel . Некоторые даже утверждают, что A ViewModel никогда не должен выставлять ничего не более чем строки . На данный момент я не такой крайности в моем мышлении. Однако я согласись, что это не хорошая идея, чтобы выставить доменные / основные объекты на вид. После некоторых первых рук чувствует себя чище, чтобы удалить эту зависимость.

В то время как я не согласен с всем, что ниже Daniel CORT делает довольно хороший чехол для ViewModel :

Большинство примеров MVC показывают напрямую с помощью класс модели, такой как linq-to-sql или структурный класс сущности. Визуальный Студийная проводка для MVC даже ручек вы в эту концепцию с по умолчанию «Добавить представление» кодовое поколение, которое позволяет вы быстро получаете взгляды на основе Одиночный класс модели. Однако внутри Real-World-Apps, вам часто нужно больше чем просто данные одинарных таблиц построить страницу. Некоторые примеры получают вокруг этого путем набивки вторичных данных в визуализацию, но лучший способ сделать Это создать «свернуть» класс для Содержать свойства для все Ваш взгляд будет нужен. Это имеет добавленные преимущества быть больше сильно набирается, поддерживая IntelliSense, будучи реализуемым и Определение именно то, что нужно просмотреть.

Джефф Хендли дает приятное описание ViewModel , который он утверждает, может использоваться в сочетании с MVC.

Редактировать
Я недавно привел мое мышление в соответствии с Джимми Богардом , касающимся моделей зрения. После простого количества боли с каждой реализацией я попробовал , имеющую одну модель просмотра на вид, создает намного более чистого опыта развития.

11
ответ дан 6 December 2019 в 07:50
поделиться

Это называется, потому что это «модель, предназначенная для вида». Я понимаю, почему выбор термина немного запутается.

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

0
ответ дан 6 December 2019 в 07:50
поделиться

Re: Почему контроллер не может заполнять свойства на экране?

Потому что вид не существует во время выполнения действия контроллера. Идея возврата ActionResult из вашего действия заключается в том, что что что-то позднее в конвейере обработки оценит результат и определит наилучший курс действия (возможно, отрисовка вида, или, возможно, выбор вида в соответствии с запросом (например, специальные виды, созданные для мобильных устройств)).

Я сделал сообщение о выборе нужного типа объекта модели здесь: Помещение М в MVC Часть I , Часть II , Часть III .

И да, термин "ViewModel" сейчас в моде, но это в духе, который имели в виду первоначальные приемники MVC.

1
ответ дан 6 December 2019 в 07:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: