J2EE业务层模式--传输对象
问题:
需要垮层次传输多种数据对象。
J2EE应用系统把服务器端的业务组件实现为会话门面和业务对象,这些组件的一些方法需要把数据返回给客户端。这些组件通常实现为远程对象,比如session bean 和 entity bean 。如果这些业务组件欂栌的是细粒度的get/set方法,客户端为了获得他需要的所有数据值,就必须调用多个getter方法。
但是这样一来回造成性能上的瓶颈,因为EJB的每次方法调用都可能是远程的。远程调用产生的网络负载,及时客户端和EJB容器在同一个JVM、操作系统或者物理主机上。所以,如果只需要每次获得一组数据,还要多次调用远程对象的getter方法,那就是极为低效的。执行的远程调用越多,应用系统也就是越啰嗦,这个应用系统的性能就是越恶化。
即使不是远程组件,也仍然会需要访问封装在另一个层次中的组件,比如业务层中的业务对象以及集成层中的数据访问对象。虽然这些组件不是远程对象,在发送、获取数据的时候,仍然应该通过粗粒度的接口访问他们。
约束:
要让客户端访问其他层中的组件,从而获取并更新数据。
要减少网络中的远程请求。
要避免啰嗦的,高网络负载的应用系统造成的网络性能恶化。
解决方案:
使用传输对象垮层次传输多种数据元素。
设计传输对象,就是要优化跨层次的数据传输。这样就可以不再逐个传输单独的数据元素,而是用一个传输对象,以单一的结构盛放请求或者响应需要的所有的数据元素。
传输对象按值传送给客户端,所以,对传输对象的所有调用都是作用于原始对象的拷贝上。