长篇连载 ,如何一次通过310-083考试

pass 310-083 (007 - design pattern)

上一篇 / 下一篇  2008-09-18 10:40:01 / 个人分类:Certification_SCWCD5

第六种设计模式Transfer Object


           概述:这个设计模式其实笔者个人感觉,非常像Business Delegate。因为那个主要是把请求的传递,利用一个对象的方法来进行,而这个设计模式,是返回业务层的处理结果,把处理的结果作为一个对象返回给调用他的请求者,我们可以通过序列化(Serializable这个对象,然后就可以通过网络把Transfer Object传递到展示层。这样展示层就不需要调用远程的EJB方法来取得数据,直接在本地可以读取其内容。(一些书籍把这个设计模式叫做Value Object),SCWCD考试里面用的是Transfer Object.

           

应用:当你的程序需要调用远程接口查询资源层的数据,并且要展示的时候,建议使用Transfer Object,可以降低网络的数据流量,有效地解决网络传输数据的瓶颈问题。原本需要返回4个结果的getUserName(), getGender(), getAge(),getMoney(),就可以通过如下的一个对象,整体返回,然后通过利用这个对象的名字.属性方式读取。


           import java.io.Serializable;

           public class User implements Serializable{

                       String userName;

                       String gender;

                       int age;

                       double money;

                       public String getUserName(){

                                   return this.userName;

                       }

                       public String getGender(){

                                   return this.gender;

                       }

                       public int getAge(){

                                   return this.age;

                       }

                       public double getMoney(){

                                   return this.money;

                       }

                       // Setters go here…

           }

 

到这里,也许有的读者会有疑问,那么如果我单一的返回数据:

username = Meng,Qinglin

gender = male

age = 28

money = 100,000.00

还有我返回一个Transfer Object对象Jimmy其中

Jimmy.username = Meng,Qinglin

Jimmy.gender = male

Jimmy.age = 28

Jimmy.money = 100,000.00

有什么区别呢?好像并没有减少数据流量啊?

对!对于数据本身来说,的确没有区别,但是,这些数据是你如何获取的呢?别忘了我们是通过互联网来请求数据的,我们要遵守网络底层的通信协议。就是需要这样

1. 客户端跟服务器发出一个请求,我要跟你要东西了,好比我要去你家里拿东西,我要先按门铃。

2. 服务器端返回一个接受你的连接的确认信息。好比屋里的人跟你说,听见了,就来开门。

3. 最后当客户端受到了服务器的回应,才会正式的建立连接。这就好比开了们,你拿到东西了。

 

第一种方法,你需要跟业务层说,请给我username,然后在请求一次,请给我gender;第三次,请给我age;最后一次,请给我money。估计如果别人要这样砸你家里的大门四次跟你要东西,你能一脚把他踢飞。

如果封装一个对象,你只要请求一次,请求的内容是啊,请把Jimmy这个对象给我吧。你是否乐意与把所有的东西都装进一个大口袋,整个交给他呢?J

 

 

           优点:可以降低网络数据流量,缩短数据存取的时间。利用jsp或者servlet可以在本地快捷访问。

 

           缺点:有可能不会及时地反映出最新的数据,这是为什么呢?当你把一个经过序列化的Transfer Object传递给展示层的时候,如果刚好这个时候,数据库里面的东西被改动了。那么你通过JSP或者servlet读取的,将会是Transfer Object里面的内容,而不是最新的数据。如果你通过他修改数据,然后再把数据传递回想更新数据库的时候,有可能出现数据同步的问题。所以我们一般使用这个设计模式用来读取数据,而不是更新数据。

           

举例:如果你做一个在线购物网站,需要从数据库读取货品,利用Transfer Object会是一个不错的选择。

 

           考试:记住以下的要点,有助于通过考试。

Simplifies Entity Bean and Remote Interface

Transfers More Data in Fewer Remote Calls

Reduces Network Traffic

Reduces Code Duplication

May Introduce Stale Transfer Objects

May Increase Complexity due to Synchronization and Version Control

Concurrent Access and Transactions


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

我的栏目

日历

« 2009-01-09  
    123
45678910
11121314151617
18192021222324
25262728293031

我的存档

数据统计

  • 访问量: 523
  • 日志数: 10
  • 建立时间: 2008-09-09
  • 更新时间: 2008-09-25

RSS订阅

Open Toolbar