MVVM:模型的状态是属于模型还是视图模型?

时间:2013-04-19 06:13:10

标签: mvvm

我正在构建一个基于MVVM的应用程序。 我已经解决了我的大多数设计问题,但我留下了一个概念上至关重要的问题: 我的ViewModel或我的模型是否应包含Model模型的状态?

最初,我认为模型应该包含自己的状态,但事实证明,在将状态传递给ViewModel(具有模型状态的90%)时会涉及很多样板文件。

然后我想将整个状态从Model移到ViewModel,但这并不适合我,因为我在概念上认为ViewModel具有View的状态而不是Model的状态。

什么是最容易接受国家的地方?

1 个答案:

答案 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'); }
    }
}