数据访问设计模式

时间:2013-03-21 09:04:56

标签: c# json mvvm windows-8 microsoft-metro

我目前正在构建一个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必须使用哪种好的设计模式来填充模型?

1 个答案:

答案 0 :(得分:1)

您的初始尝试似乎打破了“single responsibility principle”,这导致了非常混乱的DataStore类。

我对viewmodel数据操作的实现是持有'ViewModelPopulator'类的集合。每个服务填充的viewmodel都包含对viewmodelpopulator的引用,viewmodelpopulator负责对viewmodels属性进行水合。

为了促进代码重用,可能会由不同的填充程序填充单个视图模型(例如,“CarCollectionViewModel”填充“HondaCollectionViewModelPopulator”或“{{1因此,引用实际上是KiaCollectionViewModelPopulator,其中T是要填充的视图模型。

这导致视图模型和数据访问层之间的松散耦合。在你的例子中,我会在viewmodelpopulator类中放置Json反序列化(可能通过一些辅助方法)。

此外,这允许您在设计时以声明方式将填充程序从UI层插入到视图模型中(根据下面的示例),或者在运行时在代码隐藏中将它们分配。

IViewModelPopulator<T>