关于序列化:WCF-域对象和IExtensibleDataObject

关于序列化:WCF-域对象和IExtensibleDataObject

WCF - Domain Objects and IExtensibleDataObject

典型场景。我们使用老式XML Web Services internally在服务器场与多个分布式客户端和本地客户端之间进行通信。没有第三方参与,只有我们自己和我们的客户使用我们的应用程序。

我们目前正在考虑从XML WS转换为WCF/object-based模型,并且已经在尝试各种方法。其中之一涉及直接通过导线传输域对象/聚合,可能调用它们上的DataContract属性。

通过使用IExtensibleDataObjectDataContract使用DataMembers上的Order属性,我们应该能够处理简单的属性版本控制问题(请记住,我们控制所有客户端,并且可以轻松地强制更新它们)。

我一直听说我们应该通过网络使用专用的仅传输数据传输对象(DTOs)。

为什么?还有理由吗?我们在服务器端和客户端使用相同的域模型,当然,只有在认为正确且"必要"时才使用预填充集合等。收集属性利用服务定位器原理和IoC调用NHibernate-based"服务"以直接(在服务器端)获取数据,并调用客户端的WCF"服务"客户端以与WCF对话服务器场。

那么-为什么我们需要使用DTOs


曾经使用过两种方法(共享域对象和DTO),我会说共享域对象的最大问题是当您不控制所有客户端时,但是根据我过去的经验,除非开发,我通常会使用DTO。速度至关重要。

如果您有可能永远无法控制客户,那么我绝对会推荐DTO,因为一旦您与他人的客户应用程序共享域对象,您便开始将内部对象与他人的开发人员联系起来循环。

我还发现DTO在版本化服务环境中工作时很有用,这使我们能够从根本上更改应用程序的内部结构,但仍可以接受对服务接口旧版本的调用。

最后,如果您有很多客户端应用程序,那么使用DTO可能也会有好处,因为这样可以通过易于版本控制的服务对其进行保护。


以我的经验,DTO对于以下方面最有用:

  • 严格定义将通过网络发送的内容,并具有专门用于该定义的类型。
  • 将其余的应用程序,客户端和服务器与将来的更改隔离开。
  • 与非.Net系统的互操作性。 DTO当然不是必需的,但它们使设计"安全"类型更加容易。
  • 在您的方案中,这些设计功能可能没有太大关系。我已经将WCF与严格的DTO和共享的域对象一起使用,并且在两种情况下都非常有效。通过有线发送域对象时,我唯一注意到的是,我倾向于发送比我需要的更多的数据(并且以意外的方式)。这可能更多是由于我对WCF缺乏经验,而不是其他任何原因。但这绝对是您应该警惕的选择。


    推荐阅读

      Win7系统如何架设代理服务器

      Win7系统如何架设代理服务器,代理服务器,端口,本文目录Win7系统如何架设代理服务器Win7系统怎么设置代理服务器win7的网络代理设置在哪里

      服务器设置家|服务器管理器设置

      服务器设置家|服务器管理器设置,,1. 服务器管理器设置Windows10打开服务管理器的方法:方法一、运行打开服务的命令services.msc打开“运行

      客户关系管理应注意哪些问题

      客户关系管理应注意哪些问题,,CRM(客户关系管理软件)的出现,本质上是为了提高企业营销管理水平,提高竞争效率,但由于种种原因,一些CRM产品没有产

      Python之可迭代对象、迭代器、生成器

      Python之可迭代对象、迭代器、生成器,迭代,生成器,一、概念描述可迭代对象就是可以迭代的对象,我们可以通过内置的iter函数获取其迭代器,可

      应用程序对象

      应用程序对象,,应用程序对象是一个应用程序级对象,用于在所有用户之间共享信息,并且在Web应用程序运行期间可以保存数据。 应用的性质: 方法