Подтвердить что ты не робот

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

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

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

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

Некоторые разъяснения будут оценены.

4b9b3361

Ответ 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, поэтому технология немного отличается. Например, если вы привязываете текстовое поле к полю, по мере ввода в это текстовое поле, значение поля обновляется динамически. Такое взаимодействие на самом деле невозможно в веб-страницах, поскольку веб-страницы не имеют статуса.

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