Модель ASP.NET MVC против ViewModel - PullRequest
       7

Модель ASP.NET MVC против ViewModel

86 голосов
/ 31 октября 2010

ОК, я слышал обсуждение "ViewModels" в отношении MS ASP.NET MVC.

Теперь, это предназначено для конкретной модели, верно? Не конкретный вид.

Насколько я понимаю, это какая-то Модель, которая имеет конкретную цель взаимодействия с Видом? Или что-то в этом роде?

Некоторые разъяснения приветствуются.

Ответы [ 5 ]

64 голосов
/ 31 октября 2010

По существу модель и модель представления являются простыми классами с атрибутами.

Основная цель этих классов состоит в том, чтобы описать («модель») объект для своих соответствующих аудиторий, которые являются соответственно контроллером и представлением.

Так что вы совершенно правы, когда говорите

Насколько я понимаю, это некая модель, которая имеет конкретную цель взаимодействия с представлением

Таким образом, хотя классы Model являются фактически объектами домена, с которыми взаимодействует ваше приложение, модели представлений - это простые классы, с которыми взаимодействуют ваши представления.

Надеюсь, это поможет:)

Обновление :

Microsoft разработала специализированную версию паттерна представления Мартина Фаулера, в значительной степени основанную на модели.View-Controller и назвал его Model-View-ViewModel (MVVM) для приложения PF.Этот шаблон предназначен для современных платформ разработки пользовательского интерфейса, где разработчики пользовательского интерфейса предъявляют различные требования, основанные больше на бизнес-логике, чем традиционные разработчики.Взгляните здесь немного теории

62 голосов
/ 15 сентября 2013

Проще говоря, мне нравится думать о следующем:

Модель: Строго выглядит и выглядит как ваша модель данных.Для всех намерений и целей это только представление класса вашей модели данных.Он не знает о вашем Представлении или каких-либо элементах вашего Представления.Тем не менее, он не должен содержать никаких декораторов атрибутов (т. Е. Required, Length и т. Д.), Которые вы бы использовали для своего View.

View Model: Служит связующим элементом данныхваш вид и ваша модель, а во многих случаях также является оберткой для вашей модели.Он был бы бесполезным без представления, поэтому его нельзя использовать повторно в нескольких представлениях и контроллерах, как в стандартной модели.

Например, ваша Модель может иметь следующие свойства, которые являются прямыми представлениями вашего источника данных:

    public string FirstName { get; set; }
    public string LastName { get; set; }

Теперь, так как ваша Модель представления привязана к вашему Представлению, она можетимеют следующее свойство, которое объединяет поля FirstName и LastName модели в одну строку:

    [Display(Name = "Customer Name")]                
    public string CustomerFullName { get { return String.Format("{0} {1}", myModel.FirstName, myModel.LastName) }}
25 голосов
/ 03 мая 2011

Я нашел эту статью очень полезным ресурсом для понимания того, как «Модель предметной области» и «Модель представления» взаимодействуют в приложении MVC, особенно в отношении связывания. Лучше всего включать примеры вместо абстрактных описаний.

"С момента выхода MVC я наблюдал много недоразумений по поводу того, как лучше всего конструировать модели представлений. Иногда эта путаница не без уважительной причины, поскольку, похоже, нет тонны информации о рекомендациях передовой практики Кроме того, не существует решения «один размер подходит всем», которое действует как «серебряная пуля». В этом посте я опишу несколько основных шаблонов, которые возникли, и плюсы / минусы каждого. Важно обратите внимание, что многие из этих шаблонов возникли у людей, решающих реальные проблемы. "

http://geekswithblogs.net/michelotti/archive/2009/10/25/asp.net-mvc-view-model-patterns.aspx

19 голосов
/ 31 октября 2010

WikiPedia имеет более полное описание Model vs. ModelView, чем вы получите в SO-ответе: http://en.wikipedia.org/wiki/Model_View_ViewModel

Я цитирую:

Модель :как и в классическом паттерне MVC, модель относится либо к (а) объектной модели, которая представляет контент реального состояния (объектно-ориентированный подход), либо (б) к уровню доступа к данным, который представляет этот контент (подход, ориентированный на данные)).

Представление : как и в классическом шаблоне MVC, представление относится ко всем элементам, отображаемым графическим интерфейсом, таким как кнопки, окна, графика и другие элементы управления.

ViewModel : ViewModel - это «Модель представления», то есть абстракция представления, которая также служит для привязки данных между представлением и моделью.Это можно рассматривать как специализированный аспект того, что будет контроллером (в шаблоне MVC), который действует как механизм связывания / преобразования данных, который изменяет информацию о модели в информацию о представлении и передает команды из представления в модель.ViewModel предоставляет общедоступные свойства, команды и абстракции.Модель представления была уподоблена концептуальному состоянию данных, а не реальному состоянию данных в модели.

5 голосов
/ 31 октября 2010

Существует понятие ViewModel, но обычно оно не связано с Asp.net MVC.MVC использует паттерн Model View Controller, где контроллер обрабатывает взаимодействия, создает данные из модели, а затем передает эти данные в представление для отображения.

ViewModels (и шаблон View View Model Model) обычносвязан с Silverlight и WPF.Xaml немного отличается тем, что представления могут выполнять двустороннюю привязку к моделям представления, поэтому технология немного отличается.Например, если вы связываете текстовое поле с полем, когда вы вводите текстовое поле, значение поля обновляется динамически.Такое взаимодействие на самом деле невозможно на веб-страницах, поскольку веб-страницы не имеют состояния.

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

...