Подойдут ли ViewModels к шаблону Model View Presenter? - PullRequest
3 голосов
/ 16 июня 2010

Используя ViewModels в MVC, мне было интересно, практично ли применять то же самое к шаблону MVP. У меня есть только несколько соображений, одно из которых заключается в том, что MVP уже довольно сложно реализовать (со всем дополнительным кодированием, не так много на кажущейся сложности) или что у ViewModels уже немного похожий способ моделирования данных или объектов. Будет ли добавление другого слоя в форме ViewModels излишним или это логическая абстракция, которой я, как один, реализующий шаблон MVP, должен придерживаться?

Ответы [ 2 ]

3 голосов
/ 06 сентября 2010

ViewModels могут быть очень полезны в MVP, и я считаю, что они дают больше преимуществ, чем затраты на дополнительное кодирование.

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

Я работаю над публичным веб-приложением asp.net достойного размера, но следующее относится и к MVP в WinForms. Ниже приведены причины, по которым я нашел использование VM в MVP.

Сайт собирает данные из множества веб-сервисов LOB. Услуги поддерживаются различными группами разработчиков в разных бизнес-вертикалях. Данные возвращаются повсюду с точки зрения:

  • Тип Soup - Хранение идентификаторов GUID в виде строк, возврат двойных символов вместо десятичных, даты в виде строк и т. Д.
  • Сумасшедшие соглашения об именах - свойства падежа верблюда, подчеркивание в именах, аббревиатура, перемешивание

Но самая большая причина, по которой я нашел это, была в том, что предоставленная модель была такой же, как в MVC: модели просто не соответствовали форме представлений. Мы объединяем классы моделей и добавляем дополнительные поля для вычислений или агрегированных значений и т. Д.

С точки зрения изменений, которые мы сделали, мы должны были:

  • Создайте новую папку ViewModels рядом с папкой Views и Presenters (Controllers)
  • Сопоставить значения модели с моделью вида
  • Измените свойство в интерфейсе вида с типа модели на тип модели вида
  • Реализация представления в соответствии с новым объектом

Единственная часть, отнимающая много времени, это, естественно, отображение моделей в модель представления. В нашем случае мы вынуждены выполнить приличную часть обработки в наших докладчиках, чтобы получить данные, которые нам нужны, чтобы назначение свойств не имело большого значения. Для более простых нужд что-то вроде AutoMapper устранит эту боль для отображений.

0 голосов
/ 02 сентября 2010

Найдена MVPVM реализация, похожая на ту, что я хотел сделать. (На мой взгляд, это было очень сложно, когда я его реализовал. Много повторяющихся работ. Вероятно, будет лучше с инструментом генерации кода)

...