2013-04-01 83 views
0

我有三个项目:WCF的Business Objects或DataContracts

  • WCF服务项目(接口和实现)
  • ASPX Web项目(客户端)消耗WCF服务
  • 类库项目保存我的业务对象(由WCF项目和客户端共享)

我有一个WCF服务实现类文件中的方法,它从SQL中检索数据的通用列表(引用包含业务对象的项目),使用System.Web.Script.Serialization.JavaScriptSerializer对数据进行序列化,并将结果作为字符串返回。

网页客户端采用此字符串和反序列化回相应的业务对象(引用保存业务对象的项目)

这是一个Intranet应用程序,我想确保我正确地做这个。

我的问题是:

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

任何澄清将不胜感激。

回答

0

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

确实使用业务对象,如果他们看起来像数据合同将,即它们是一群公共属性的,不包含儿童/孙子等的集合

不要使用业务对象,如果他们包含一堆你不需要的数据。例如,填充数百个实体的网格会请求特定于该网格的数据协定。

如果业务对象包含验证逻辑等,否则您将不得不在Web服务中重复使用业务对象。

如果您只是要使用数据合同来充分扩展业务对象,请使用业务对象。

如果您想要从非.NET代码使用该服务接口,请勿使用业务对象。

如果您必须大量配置序列化,请勿使用业务对象。

,如果他们需要“知道”他们在哪里(Web服务器或应用服务器)

不是你的情况,但不使用的业务对象:不要使用业务对象,如果你正在建设一个丰富的客户端数据输入。

这就是现在,我会看看是否有更多的东西出现在我身上。:)

+0

感谢您的答复。一些问题到你的回应: – alpha

+0

“不要使用业务对象,如果你必须大规模配置他们的序列化” - 我不是用任何类型的序列化装饰我的类,而是在我使用System序列化的服务类中。 Web.Script.Serialization.JavaScriptSerializer。你是什​​么意思“大规模配置他们的序列化”。 – alpha

+0

另外,由于业务对象看起来像datacontracts,并且它们将用于充分扩充业务对象,因此在这种情况下,我看起来可以使用业务对象。我不打算使用DataContracts。 只是想确认。我见过他们推荐使用业务对象和数据合同的站点,并使用automapper来映射这两个站点。 – alpha