民间,
我正在尝试找出将域对象/数据源中的数据转换为“ViewModel”对象的模式或最佳实践。在我的特定示例中,域对象是WCF代理对象。对WCF方法的任何调用都将填充这些代理对象,这些代理对象最终会被转移到“ViewModel”对象。见Architectural diagram
这篇微软文章:http://msdn.microsoft.com/en-us/magazine/dd419663.aspx讨论了如何使用Repository模式。它在“数据模型和存储库”部分中提到。这是最好的方法吗?有人可以建议我吗?
dorman
答案 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。