填充“ViewModel”对象的最佳实践/模式

时间:2011-03-25 13:18:24

标签: .net design-patterns mvvm

民间,

我正在尝试找出将域对象/数据源中的数据转换为“ViewModel”对象的模式或最佳实践。在我的特定示例中,域对象是WCF代理对象。对WCF方法的任何调用都将填充这些代理对象,这些代理对象最终会被转移到“ViewModel”对象。见Architectural diagram

这篇微软文章:http://msdn.microsoft.com/en-us/magazine/dd419663.aspx讨论了如何使用Repository模式。它在“数据模型和存储库”部分中提到。这是最好的方法吗?有人可以建议我吗?

dorman

3 个答案:

答案 0 :(得分:2)

存储库模式与数据访问层(WCF内部)有关。这与表示层无关。

我建议你根据UI的要求在MVC项目中声明你的Model和ViewModel类(不考虑你的数据库模式)。然后,您可以使用AutoMapper来简化将值从WCF代理类复制到模型所需的代码。您可能希望将此代码封装在Adapter类中,该类将保护应用程序的其余部分不受AutoMapper代码的影响。

编辑:

不要将您的WCF代理用作模型类。根据您的UI声明单独的模型类,并使用AutoMapper在它们之间复制数据。

答案 1 :(得分:1)

是的,你需要有一个存储库。 这将为您提供一些优势,例如轻松测试视图模型;也可以在以后轻松切换到另一种存储库。

就您提供的文章而言, - 它为他们提供了对视图模型逻辑进行单元测试的优势;然后,他们可以从XML文件存储库切换到SQL服务器存储库(作为示例)。

确保将抽象存储库注入ViewModel。

答案 2 :(得分:0)

保持简单,每班只承担一项责任。

这表明您的代理(通信对象)返回的对象与ViewModel(视图对象)使用的对象之间存在一些分隔。这样,客户端逻辑与通信/传输方法分离。

如果您的WCF服务与UI元素密切相关,那么只需从CO转换为VO即可。由于视图绑定到VO,因此视图会更新。

如果需要在客户端上插入业务或域逻辑,请转换为中间域对象。然后让对象与其他域模型对象(您提到的文章中的所谓存储库)进行交互。 VO应该监听域更改并做出相应的反应。此模式表明域对象不依赖于WCF,也不依赖于WPF。