ITPub博客

首页 > Linux操作系统 > Linux操作系统 > pass 310-083 (007 - design pattern)

pass 310-083 (007 - design pattern)

原创 Linux操作系统 作者:powerbat 时间:2008-09-18 10:40:01 0 删除 编辑
第六种设计模式 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

225526_200809181041041.jpg

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/225526/viewspace-448815/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-09-09

  • 博文量
    10
  • 访问量
    7477