应该采用什么样的设计方法

时间:2014-06-20 08:34:27

标签: c# .net asp.net-mvc wcf dto

我的项目解决方案如下:

  1. MVC项目(包含下列两个项目的参考)
  2. 包含业务方法的WCF服务(包含下面列出的项目的参考)
  3. DTO或BusinessOBject的通用项目
  4. 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?

    谢谢

2 个答案:

答案 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>