Модель ASP.NET MVC против ViewModel
Хорошо, я слышал обсуждение "ViewModels" в отношении MS ASP.NET MVC.
Теперь, что предназначено для конкретной модели, правильно? Не определенный вид просмотра.
Насколько я понимаю, это своего рода модель, которая имеет специфическую цель взаимодействия с View? Или что-то в этом роде?
Некоторые разъяснения будут оценены.
Ответы
Ответ 1
По существу модель и модель представления - это простые классы с атрибутами.
Основная цель этих классов - описать (для "Моделировать" ) объект для своих соответствующих аудиторий, которые являются соответственно контроллером и представлением.
Итак, вы совершенно правы, когда говорите
Насколько я понимаю, это своего рода Модель, которая имеет конкретную цель взаимодействуя с представлением
Итак, в то время как классы модели являются фактически объектами домена, с которыми взаимодействует ваше приложение, модели просмотра - это простые классы, с которыми взаимодействуют ваши представления.
Надеюсь, это поможет:)
Обновление
Корпорация Майкрософт разработала специализированную версию шаблона представления Мартин-фаулера в основном на основе Model-View-Controller и назвала его Model-View-ViewModel (MVVM) для приложения PF. Этот шаблон ориентирован на современные платформы разработки пользовательского интерфейса, где разработчики пользовательского интерфейса имеют разные требования, основанные скорее на бизнес-логике, чем традиционные разработчики. Посмотрите здесь для немного теории
Ответ 2
В простейшем из терминов мне нравится думать о следующем:
Модель: Строго выглядит и выглядит как ваша модель данных. Во всех смыслах и целях это всего лишь представление класса вашей модели данных. Он не знает вашего представления или каких-либо элементов в вашем представлении. Тем не менее, он не должен содержать декораторов атрибутов (т.е. Required, Length и т.д.), Которые вы использовали бы для своего представления.
Модель просмотра: Служит в качестве связующего данных между вашим представлением и вашей моделью и во многих случаях также является оболочкой для вашей модели. Это будет бесполезно без представления, поэтому он обычно не может использоваться повторно для нескольких видов и контроллеров, таких как стандартная модель.
В качестве примера ваша модель может иметь следующие свойства, которые являются прямыми представлениями вашего источника данных:
public string FirstName { get; set; }
public string LastName { get; set; }
Теперь, поскольку ваша модель View привязана к вашему представлению, она может иметь следующее свойство - которое объединяет поле Model FirstName и поле LastName вместе как одну строку:
[Display(Name = "Customer Name")]
public string CustomerFullName { get { return String.Format("{0} {1}", myModel.FirstName, myModel.LastName) }}
Ответ 3
Я нашел эту статью очень полезным ресурсом для понимания того, как "модель домена" и "модель просмотра" взаимодействуют в приложении MVC, особенно в отношении привязки. Лучше всего включать примеры вместо абстрактных описаний.
"Поскольку MVC был выпущен, я наблюдал много недоразумений о том, как лучше всего создавать модели взглядов. Иногда эта путаница не без оснований, потому что, похоже, нет тонны информации в рекомендациях по лучшей практике. Кроме того, нет решения" одного размера подходит всем ", которое действует как серебряная пуля. В этом посте я описываю несколько основных моделей, которые возникли, и плюсы/минусы каждого. Важно отметить, что многие из этих шаблоны возникли у людей, решающих реальные проблемы".
http://geekswithblogs.net/michelotti/archive/2009/10/25/asp.net-mvc-view-model-patterns.aspx
Ответ 4
WikiPedia имеет более полное описание Model vs. ModelView, чем вы получите в ответ SO: http://en.wikipedia.org/wiki/Model_View_ViewModel
Я цитирую:
Модель: как в классическом шаблоне MVC, модель ссылается либо на (a) объектную модель, которая представляет реальный контент состояния (объектно-ориентированный подход), либо (b) данные уровень доступа, который представляет этот контент (ориентированный на данные подход).
Просмотр: как в классическом шаблоне MVC, представление относится ко всем элементам, отображаемым графическим интерфейсом, таким как кнопки, окна, графика и другие элементы управления.
ViewModel: ViewModel - это "Модель представления", что означает абстракцию представления, которая также служит для связывания данных между представлением и моделью. Это можно рассматривать как специализированный аспект того, что будет Контроллером (в шаблоне MVC), который действует как связующее/конвертер данных, которое изменяет информацию о модели в представление информации и передает команды из представления в модель. ViewModel предоставляет публичные свойства, команды и абстракции. ViewModel сравнивается с концептуальным состоянием данных, а не с реальным состоянием данных в Модели.
Ответ 5
Существует понятие ViewModel, но оно обычно не связано с Asp.net MVC. MVC использует панель управления представлением модели, где контроллер обрабатывает взаимодействия, создает данные из модели, а затем передает эти данные в представление для отображения.
ViewModels (и шаблон Model View ViewModel) в большей степени связаны с Silverlight и WPF. Xaml немного отличается тем, что представления могут выполнять двустороннюю привязку к ViewModels, поэтому технология немного отличается. Например, если вы привязываете текстовое поле к полю, по мере ввода в это текстовое поле, значение поля обновляется динамически. Такое взаимодействие на самом деле невозможно в веб-страницах, поскольку веб-страницы не имеют статуса.
Сходство в двух шаблонах состоит в том, что они оба пытаются отделить логику от дисплея. Наиболее распространенное использование/причина для этого - тестирование: вы хотите иметь возможность выполнять из кода (через структуру тестирования) все взаимодействия, которые пользователь будет вызывать через пользовательский интерфейс.