Подходят ли ViewModels к шаблону Model View Presenter?

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


person Jonn    schedule 16.06.2010    source источник


Ответы (2)


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

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

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

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

  • Type Soup — хранение GUID в виде строк, возврат двойных чисел вместо десятичных, даты в виде строк и т. д.
  • Сумасшедшие соглашения об именах - свойства Camel case, символы подчеркивания в именах, путаница аббревиатур

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

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

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

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

person blu    schedule 06.09.2010
comment
Несколько месяцев проб и ошибок заставили меня задуматься об использовании виртуальных машин в каждом конкретном случае. Это упрощает большую часть работы, когда дело доходит до упаковки моделей, поэтому изменения можно легко корректировать. Однако вместо картографов я использую их в качестве оболочки для упрощения. - person Jonn; 07.09.2010

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

person Jonn    schedule 02.09.2010