C# 数据访问设计模式

C# 数据访问设计模式,c#,json,mvvm,windows-8,microsoft-metro,C#,Json,Mvvm,Windows 8,Microsoft Metro,我目前正在构建一个Windows 8应用商店应用程序,该应用程序需要我拨打几个web服务电话。调用返回一个json字符串,我正在将其反序列化为对象。我将MVVM设计模式与Caliburn.Micro一起用于WinRT 最初,为了从对每个视图模型的web服务调用中获取数据,我创建了一个类DataStore,它声明了自身的静态实例。该类具有与我的所有模型对应的属性。当需要进行web服务调用时,我在“APIData”中调用了一个静态类方法,该方法读取参数字典,将这些参数序列化为JSON,进行API调用

我目前正在构建一个Windows 8应用商店应用程序,该应用程序需要我拨打几个web服务电话。调用返回一个json字符串,我正在将其反序列化为对象。我将MVVM设计模式与Caliburn.Micro一起用于WinRT

最初,为了从对每个视图模型的web服务调用中获取数据,我创建了一个类DataStore,它声明了自身的静态实例。该类具有与我的所有模型对应的属性。当需要进行web服务调用时,我在“APIData”中调用了一个静态类方法,该方法读取参数字典,将这些参数序列化为JSON,进行API调用,并将JSON结果返回给数据存储类。此时JSON被反序列化并用于更新数据存储属性。在我的每个ViewModels中,我引用了该VM的datacontext所需的任何数据存储属性

这导致了重复的代码和非常混乱的数据存储类


我的问题是,如果必须使用从webservice调用返回的json来填充模型,那么使用什么样的设计模式才是好的呢?

您最初的尝试似乎破坏了“”并导致了非常混乱的数据存储类

我对viewmodel数据操作的实现是保存“ViewModelPopulator”类的集合。每个服务填充的viewmodel都包含一个对viewmodelpopulator的引用,viewmodelpopulator负责创建viewmodels属性

为了促进代码重用,单个viewmodel可能由不同的填充器填充(例如,由“
HondaCollectionViewModelPopulator
”或“
KiaCollectionViewModelPopulator
”填充的“
CarCollectionViewModelPopulator
”)因此,该引用实际上指向一个
IViewModelPopulator
,其中T是要填充的视图模型

这会导致viewmodels和数据访问层之间的松散耦合。在您的示例中,我将Json反序列化(可能通过一些助手方法)放在viewmodelpopulator类中

此外,这允许您在设计时从UI层声明性地将填充器注入viewmodel(如下面的示例所示),或者在运行时在codebehind中分配它们

<Page.DataContext>
    <VM:SearchPageViewModel>
        <VM:SearchPageViewModel.ViewModelPopulator>
            <VMP:SearchPageViewModelPopulator />
        </VM:SearchPageViewModel.ViewModelPopulator>
    </VM:SearchPageViewModel>
</Page.DataContext>