我的项目解决方案如下:
IN MVC - 调用WCF服务方法如下 - IList<Employee> RetriveData()
它是从MVC调用的--ServiceClient.RetrieveData(),现在问题是返回对象Employee
指向ServiceHost.Employee
对象而不是 - Common.DTO.Employee
对象(库项目)所以,它给出了类型转换错误
任何人都可以告诉我这里的解决方案是什么,或者我应该删除&#34; Common.DTO&#34;项目引自MVC,只使用Servicehost.Employee
对象。
请指导我这个设计,应该使用什么。
注意:所有对象都是DATACONTRACT(可血清化)。
在MVC应用程序中,在检索DTO对象之后,我确实将它们转换为Viewmodel(它还在内部引用任何集合对象,如IList<ServiceHost.LookupItem>
。是否可以直接使用所有生成的serized对象OR,我是否必须转换/转换每个将对象返回到common.DTO.
对象,然后转换为ViewModel?
谢谢
答案 0 :(得分:1)
不使用 Visual Studio的 添加服务参考。这样做会导致在解决方案和客户端代理中定义多种类型,随着时间的推移会变得不同步。
定义整个解决方案使用的通用合同程序集要好得多。
请特别参阅 WCF the Manual Way…the Right Way 第3页
您应尽可能尝试遵循规范数据模型等模式。这意味着POCO ORM的类型相同; WCF;并作为视图模型中的聚合。数据转换很昂贵;导致维护增加和可能的保真度损失。 http://www.soapatterns.org/ http://www.eaipatterns.com/
答案 1 :(得分:0)
这实际上取决于你想要的抽象级别。
如果ServiceHost.Employee
是您的域模型而MVC是您的表示层,那么使用DTO弥补这里的差距是有意义的。鉴于您似乎想要使用的方法,那么解决方案是让ServiceClient.RetrieveData
返回IList<Common.DTO.Employee>
而不是IList<ServiceHost.Employee>
。