WCF业务对象或数据契约

WCF业务对象或数据契约,wcf,datacontracts,Wcf,Datacontracts,我有三个项目: WCF服务项目(接口和实施) 使用WCF服务的aspx web项目(客户端) 保存我的业务对象的类库项目(由WCF项目和客户端共享) 我在WCF服务实现类文件中有一个方法,该方法从SQL检索通用数据列表(引用保存业务对象的项目),使用System.Web.Script.Serialization.JavaScriptSerializer序列化数据,并将结果作为字符串返回 web客户端获取此字符串并将其反序列化回相应的业务对象(引用保存业务对象的项目) 这是一个内部网应用程序,

我有三个项目:

  • WCF服务项目(接口和实施)
  • 使用WCF服务的aspx web项目(客户端)
  • 保存我的业务对象的类库项目(由WCF项目和客户端共享)
我在WCF服务实现类文件中有一个方法,该方法从SQL检索通用数据列表(引用保存业务对象的项目),使用System.Web.Script.Serialization.JavaScriptSerializer序列化数据,并将结果作为字符串返回

web客户端获取此字符串并将其反序列化回相应的业务对象(引用保存业务对象的项目)

这是一个内部网应用程序,我想确保我做得正确

我的问题是:

  • 我应该使用数据契约而不是业务对象吗?不确定何时使用DataContracts以及何时使用业务对象
  • 如果我使用的是DataContracts,我应该不使用吗 System.Web.Script.Serialization.JavaScriptSerializer

任何澄清都将不胜感激。

当然,没有一个答案。我认为问题在于首先是否要使用业务对象,否则我的第四点几乎涵盖了这一点

如果业务对象看起来像数据契约,也就是说,它们是一堆公共属性,不包含子/孙辈等的集合,那么一定要使用它们


如果业务对象包含大量您不需要的数据,请不要使用它们。例如,用数百个实体填充一个网格,就需要一个特定于该网格的数据契约

如果业务对象包含验证逻辑等,则一定要使用这些对象,否则您将不得不在web服务中复制它们

如果您只是打算使用数据契约来完全膨胀业务对象,那么一定要使用业务对象


如果希望从非.net代码中使用该服务接口,请不要使用业务对象


如果必须大量配置业务对象的序列化,请不要使用它们


如果业务对象需要“知道”它们在哪里(web服务器或应用程序服务器),请不要使用它们

不是您的情况,而是:如果您正在构建用于数据输入的富客户机,请务必使用业务对象


现在就这些,我看看是否还有什么事情发生在我身上。:)

谢谢你的回复。您的回答中有一些问题:“如果必须大规模配置业务对象的序列化,请不要使用它们”——除了在服务类中使用System.Web.Script.serialization.JavaScriptSerializer对其进行序列化之外,我不会使用任何类型的序列化来装饰我的类。你所说的“大规模配置它们的序列化”是什么意思?另外,由于业务对象看起来像datacontracts,并且它们将被用来完全膨胀业务对象,那么在这种情况下,我可以使用业务对象。我不打算使用数据合同。我只是想确认一下。我见过一些网站,他们建议同时使用business objects和datacontract,并使用automapper来映射两者。一次投票就值得一千次感谢。:)如果我已经回答了您的问题,那么您应该将其标记为已回答。如果您不希望对部分数据进行序列化,或者如果它们无法正确序列化,则可以配置序列化。循环引用在这里可能很糟糕。另一个例子是如果您不想序列化对象的子对象。另一种情况是,从对一个对象的多个引用开始,反序列化的graoh实例化了多个对象,其中您只需要一个对象。