我正在构建一个基于MVVM的应用程序。 我已经解决了我的大多数设计问题,但我留下了一个概念上至关重要的问题: 我的ViewModel或我的模型是否应包含Model模型的状态?
最初,我认为模型应该包含自己的状态,但事实证明,在将状态传递给ViewModel(具有模型状态的90%)时会涉及很多样板文件。
然后我想将整个状态从Model移到ViewModel,但这并不适合我,因为我在概念上认为ViewModel具有View的状态而不是Model的状态。
什么是最容易接受国家的地方?
答案 0 :(得分:1)
您正确地感知具有视图状态的ViewModel。从概念上讲,模型的状态是模型的一部分,但它可能会因您的具体情况而异。将模型视为数据:作为可以序列化的东西,可以来自服务器和/或可以/应该持久存储在数据库中。
例如,如果您有购物车,那么运输车的项目显然是模型的一部分。但是,退房流程中的状态(已收到付款方式,验证付款方式,用户确认)可以采用任何一种方式。
至于样板 - 对于我来说,使用合理数量的锅炉板的范例包含(实际上,在c#中引用)ViewModel中的整个模型,并为模型中的所有属性公开getter和setter,适当的均匀通知。 e.g。
class PersonModel {
public string firstName { get; set; }
public string lastName { get; set; }
}
class PersonViewModel : INotifyPropertyChanged {
private PersonModel model;
// next 4 lines can be factored out to a BaseViewModel class
private PropertyChangedEventHandler PropertyChanged;
private raise(string propName) {
this.PropertyChanged( new PropertyChangedEventArgs(propName) );
}
// ... repeat for each property in the model
public string firstName {
get { return model.fistName; }
set { model.firstName = value; raise('firstName'); }
}
public string lastName {
get { return model.lastName; }
set { model.lastName = value; raise('lastName'); }
}
}