2

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

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

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

什么是最被接受的放置状态的地方?

4

1 回答 1

1

您正确感知具有视图状态的 ViewModel。从概念上讲,模型的状态是模型的一部分,但它可能会因您的特定场景而异。将模型视为数据:作为可以序列化的东西,可以来自服务器和/或可以/应该保存在数据库中。

例如,如果您有一个购物车,那么运输车中的物品显然是模型的一部分。但是,结帐过程中的状态(已收到付款方式、已验证付款方式、已确认用户)可以采用任何一种方式。

至于样板 - 对我来说具有合理数量的样板的范式包含(实际上,在 c# 中引用)ViewModel 中的整个模型,并为模型中的所有属性公开 getter 和 setter,适当的甚至通知。例如

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'); }
    }
}
于 2013-04-19T07:31:55.683 回答