Это очень интересный вопрос.
Как правило, я обнаружил, что в приложениях MVVM вы пытаетесь изолировать модель как конечный результат — продукт/часть данных — модели представления. Например, если бы у вас был магазин велосипедов, вы бы увидели витрину магазина как вид, продавца как модель представления (при условии, что это настраиваемый велосипед, созданный на заказ), а модель как готовый объект велосипеда.
В случае создания велосипеда, пока он находится на стадии «прототипирования», которую необходимо представить, я стараюсь оборачивать его в ViewModel — потому что в этом есть логика. Это кажется дополнительным шагом, но, в конце концов, вы можете проводить проверки в этой ViewModel при ее создании. Если ваша модель негибкая для добавления к ней INotifyPropertyChanged (или если она была сгенерирована из службы), у вас будут проблемы, если у вас на велосипеде шины «0» — это должно вызвать проблемы!
Многие люди, как правило, становятся немного ленивее и рассматривают MVVM как шаблон, который абстрагирует прототипированные модели (где ввод данных идет вперед/назад, обновляется) в модели — когда они на самом деле должны быть ViewModels.
В примере у меня будет каталог MVVM, который выглядит так:
Models
-Bicycle (an object that can be passed across a service, etc -- data)
Views
-BicycleCreatorView (the view or data template of the model)
-StoreFrontView (the view of the entire store/app)
ViewModels
-BicycleCreatorViewModel (the view model which CONSTRUCTS a Bicycle model as the end result)
-StoreFrontViewModel (the view model for the entire store)
Теперь вы могли бы очень легко ТАКЖЕ иметь конструктор BicycleCreatorViewModel, который принимает модель велосипеда и предварительно заполняет ее. Это не редкость. Кто-то может прийти в магазин и сказать: «Эй, ты можешь сделать это похожее на другое? Вот как это выглядит». В то время как конечным результатом является наличие другого свойства (возможно, просто get {}), которое фактически отображает объект Bicycle, проверка IF хороша, и у нас нет чего-то необычного с 0 шинами, без сиденья (может быть, это особенность?) , и т.д.
Итак, короче говоря, я всегда хотел бы, чтобы ваша модель (если вы не можете расширить ее ЛЮБЫМ способом) была заключена в ее СОБСТВЕННУЮ ViewModel для этой цели. Это был бы настоящий шаблон MVVM. Вы всегда можете использовать такие вещи, как ReactiveUI или другие инструменты, которые могут обернуть свойства. Вы можете потратить на это немного больше времени, но конечный продукт будет гораздо более гибким и менее подверженным ошибкам, чем в противном случае. По сути, вы уже делаете это, но вы, вероятно, могли бы переписать его, чтобы он казался «чище» и нарисовал линию.
Теоретически вы также можете проверить, можете ли вы подойти к этому с помощью такого метода:
Есть ли аспектно-ориентированный инструментарий, который вы могли бы потенциально использовать? Может быть, сделать ваши классы частичными, чтобы включить INotifyPropertyChanged в расширение, а затем XmlIgnore определенные части, если сериализация является проблемой/вопросом?
Проблема в том, что у нас очень мало знаний о том, откуда берется модель и как вы ее используете. Надеюсь, что это поможет или даст вам интересную идею. Хотелось бы посмотреть, придумаете ли вы решение, более «вдохновленное», чем стандартное.
person
Locke
schedule
13.08.2014
ParentClass
— это данные для рендеринга, которые можно использовать вне моего приложения. В контексте моего приложения это все еще просто данные модели. - person William Thomas Waller   schedule 13.08.2014