Воспользовавшись ViewModels в MVC, мне было интересно, применимо ли применить то же самое к шаблону MVP. У меня есть только несколько соображений, один из которых заключается в том, что MVP уже довольно сложно реализовать (со всем дополнительным кодированием, не так много по кажущейся сложности) или что ViewModels уже имеют несколько схожий способ моделирования данных или объектов. Будет ли добавление другого слоя в виде ViewModels избыточным или это логическая абстракция, которую я, как один, реализующий шаблон MVP, должен придерживаться?Будет ли ViewModels вписываться в модель View Presenter?
ответ
ViewModels могут быть очень полезны в MVP, и я думаю, что добавьте больше преимуществ, чем стоимость дополнительное кодирование.
Я считаю, что руководящее правило заключается в том, чтобы использовать их там, где они вам нужны, а не просто добавлять больше моделей или архитектуры ради них самих.
Я работаю над веб-приложением с поддержкой asp.net с приличным размером, но в WinForms также применяется MVP. Ниже приведены причины, по которым я нашел VM в MVP.
Сайт агрегирует данные из лодок веб-служб LOB. Услуги поддерживаются различными группами разработчиков в разных бизнес-вертикалях. Данные, поступающие обратно повсюду с точки зрения:
- типа Soup - Сохранение GUIDs как строки, возвращая двойников вместо знаков после запятой, даты как строки, и т.д.
- Сумасшедшие Условные обозначения - тематические свойства верблюд, подчеркивания в названиях, аббревиатура jumbles
Но самая большая причина, по которой я нашел это, была предоставлена моделью, такая же, как и в MVC: модели просто не соответствовали форме просмотров. Мы объединяем классы модели и добавлять дополнительные поля для расчетов или агрегированных значений и т.д.
С точкой зрения изменений, которые мы сделали, мы должны были:
- Создать новую папку ViewModels вдоль стороны соображения и Презентер (контроллеры) папка
- Карты значений модели в модель представления
- Измените свойство на интерфейсе просмотра от типа модели к типу вида модели
- Реализовать представление в соответствии с новым объектом
Единственная часть этого времени, естественно, является отображением модели (моделей) модели представления. В нашем случае мы вынуждены делать приличную обработку в наших докладчиках, чтобы получить нужные нам данные, что присвоение свойств не имеет большого значения. Для более простых нужд что-то вроде AutoMapper устранит эту боль для сопоставлений.
Обнаружена реализация MVPVM, которая похожа на то, что я хотел сделать. (Было установлено, что это очень сложно, если я его реализовал, хотя и много. Повторяю, будет лучше с помощью инструмента генерации кода)
Несколько месяцев испытаний и ошибок заставляют меня думать об использовании виртуальных машин в каждом конкретном случае. Это упрощает большую работу, когда дело доходит до упаковки моделей, поэтому изменения могут быть легко отрегулированы. Однако, вместо того, чтобы использовать mappers, я использую их в качестве обертки для упрощения. – Jonn