我目前正在构建一个Windows 8商店应用,需要我进行多次Web服务调用。调用返回一个我正在反序列化为对象的json字符串。我正在使用MVVM设计模式和Caliburn.Micro for WinRT。
最初,为了从Web服务调用获取每个View模型的数据,我创建了一个类DataStore,它声明了一个自己的静态实例。该类具有与我所有模型相对应的属性。当需要进行Web服务调用时,我在“APIData”中调用了一个读取参数字典的静态类方法,将这些参数序列化为JSON,进行API调用并将JSON结果返回给DataStore类。此时,JSON被反序列化并用于更新DataStore属性。在我的每个ViewModel中,我引用了该VM的datacontext所需的DataStore属性。
这导致重复的代码和非常混乱的DataStore类。
我的问题是,使用从webservice调用返回的json必须使用哪种好的设计模式来填充模型?
答案 0 :(得分:1)
您的初始尝试似乎打破了“single responsibility principle”,这导致了非常混乱的DataStore类。
我对viewmodel数据操作的实现是持有'ViewModelPopulator'类的集合。每个服务填充的viewmodel都包含对viewmodelpopulator的引用,viewmodelpopulator负责对viewmodels属性进行水合。
为了促进代码重用,可能会由不同的填充程序填充单个视图模型(例如,“CarCollectionViewModel
”填充“HondaCollectionViewModelPopulator
”或“{{1因此,引用实际上是KiaCollectionViewModelPopulator
,其中T是要填充的视图模型。
这导致视图模型和数据访问层之间的松散耦合。在你的例子中,我会在viewmodelpopulator类中放置Json反序列化(可能通过一些辅助方法)。
此外,这允许您在设计时以声明方式将填充程序从UI层插入到视图模型中(根据下面的示例),或者在运行时在代码隐藏中将它们分配。
IViewModelPopulator<T>