柚子Nan--回归原点

Everything can be as easy as you like or as complex as you need.
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

关于Duwamish中的Data层

Posted on 2004-09-21 10:05  柚子Nan  阅读(1180)  评论(3)    收藏  举报

MS的五层架构事例Duwamish中的低层Data层,负责各层之间的数据传输载体。

 

当使用远程接口的时候,每一次调用的代价都非常大,结果是,你要减少调用的次数,这就意味着每次调用都要传输大量的数据。大量的数据传输的方法可以通过使用大量的参数来实现,然而,这样写出的程序非常笨拙,实际上,对于一些语言难以实现返回多个值。

解决的办法就是创建一个数据传输对象,这个对象将保留所有掉用需要用到的数据。它需要被序列化以便能在连接中传输。就相当于我们设计的Struct,在很多时候,数据传输对象都是被我们告知永远不要写的对象之一,因为他们不过是一堆变量和他们的SetGet方法。

 

然而在实际的项目开发中,我们遇到需要返回很多数据的时候并不是去Data层声明我们需要的数据实体,而是使用DataTable来满足我们的需要,就是所谓“弱类型的DataSet”,而Data层生成的DataSet称为“强类型的DataSet”。

 

数据传输对象的设计是围绕特定客户端的需要来进行的。在企业开发中,通常会遇到决策使用单一数据传输对象还是不同数据传输对象,这个问题并没有准确的答案,取决于应用程序中数据传输的相似程度和程序开发人员的喜好!另外一个有趣的问题是请求方发送方的数据是否需要统一的数据传输对象,同样这个问题也没有统一的规则。

 

数据传输对象的两种表现格式:记录集DataSet 集合数据结构。

 

关于序列化

数据传输对象除了简单的SetGet方法以外,还需要负责把自己序列化成某种格式以便在网络上传输,选择的格式要根据如下3个因素:连接的两端是什么,连接上能运行什么,序列化的难易程度。.net提供了内建的二进制和XML序列化方法。

 

为什么要序列化?

从理论上来说,无论何时服务器改变了数据传输对象的定义,客户也都应该可以同时更新他的数据。但在实际中,情况并不是这样,用一个过时客户来访问一个服务器时总会带来一定的问题,但是序列化机制会或多或少使问题简单一点。如果使用纯粹的二进制序列化将会使数据传输对象的通信完全丢失。

关于序列化,真的还不懂多少,哪个说说:)