如鹏网 大学生计算机学习社区

CowNew开源团队

http://www.cownew.com 邮件请联系 about521 at 163.com

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  363 随笔 :: 2 文章 :: 808 评论 :: 0 Trackbacks

DTO模式和SessionFacade模式的应用

  DTO模式

我们的系统中经常需要在客户端和服务器之间传递批量数据 例如客户端需要显示一个托运协议单 那么客户端就要向服务器请求这个托运协议单中的所有数据 ConsignDate,StartPort,SenderName 等等 、或者客户端需要创建、修改或删除一个托运协议单。所有这些都会造成巨大数量的数据在客户端和服务器中间交换,这通常可以通过两种方法解决:(1)使用一个有很多参数的函数调用,每个数据项都作为函数的一个参数。例如

CreateConsignBill(String aBillId, String,Date aConsignDate,String,Port StartPort,String SenderName, …… )

UpdateConsignBill(String aBillId, String,Date aConsignDate,String,Port StartPort,String SenderName, …… )

(2)客户端使用许多细粒度调用与服务器交换数据。如下图


第一种方式性能比较高,只要在一次网络调用中就可以完成数据传输,但是缺点是函数参数太多,函数将迅速失去控制,每当一个参数需要去被增加或删除,方法签名需要改变。;第二种方法可以保证调用的清晰性,但是最大的缺点就是性能问题,一次简单的读取数据就会导致大量的网络调用,每个对服务器的调用是一个网络调用,

需要对返回值序列化和反序列化,当 ejb 服务器还要对每次网络调用进行安全检查,并且如果客户端没有使用 JTA 的客户分界( client-demarcated )事务,每个方法调用可能实际上在它自己的分离的事务中执行。用这种形式执行多个网络调用将导致严重的性能下降。

我们的解决方案是生成一个称为数据传送对象( Data Transfer Object,DTO )的普通 Java 类,它代表一些服务器端数据的快照 , 该对象在一个网络调用中封装了批量数据。

在一个分布式系统中可以把 DTO 用作读取操作和更新操作。当一个客户端需要更新服务器上的一些数据时,它能创建一个封装所有服务器需要去更新的信息的 DTO, 并传到服务器去处理,服务器读取 DTO 中的数据,然后进行相应的处理。当一个客户端需要服务器中的数据时,只要向服务器端发送一个消息,服务器将数据组装成 DTO ,然后将此 DTO 做为消息调用的返回值返回给客户端。

下面时读取数据的活动图

posted on 2006-03-21 00:42 CowNew开源团队 阅读(2093) 评论(1)  编辑  收藏

评论

# re: DTO模式和SessionFacade模式的应用(一) 2006-04-26 15:19 f
fdsafdsafdsafdsafdsa  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: