如鵬網(wǎng) 大學生計算機學習社區(qū)

          CowNew開源團隊

          http://www.cownew.com 郵件請聯(lián)系 about521 at 163.com

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            363 隨筆 :: 2 文章 :: 808 評論 :: 0 Trackbacks

          DTO模式和SessionFacade模式的應用

          ? DTO模式

          我們的系統(tǒng)中經(jīng)常需要在客戶端和服務器之間傳遞批量數(shù)據(jù) 例如客戶端需要顯示一個托運協(xié)議單 那么客戶端就要向服務器請求這個托運協(xié)議單中的所有數(shù)據(jù) ConsignDate,StartPort,SenderName 等等 、或者客戶端需要創(chuàng)建、修改或刪除一個托運協(xié)議單。所有這些都會造成巨大數(shù)量的數(shù)據(jù)在客戶端和服務器中間交換,這通常可以通過兩種方法解決:(1)使用一個有很多參數(shù)的函數(shù)調(diào)用,每個數(shù)據(jù)項都作為函數(shù)的一個參數(shù)。例如

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

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

          (2)客戶端使用許多細粒度調(diào)用與服務器交換數(shù)據(jù)。如下圖


          第一種方式性能比較高,只要在一次網(wǎng)絡調(diào)用中就可以完成數(shù)據(jù)傳輸,但是缺點是函數(shù)參數(shù)太多,函數(shù)將迅速失去控制,每當一個參數(shù)需要去被增加或刪除,方法簽名需要改變。;第二種方法可以保證調(diào)用的清晰性,但是最大的缺點就是性能問題,一次簡單的讀取數(shù)據(jù)就會導致大量的網(wǎng)絡調(diào)用,每個對服務器的調(diào)用是一個網(wǎng)絡調(diào)用,

          需要對返回值序列化和反序列化,當 ejb 服務器還要對每次網(wǎng)絡調(diào)用進行安全檢查,并且如果客戶端沒有使用 JTA 的客戶分界( client-demarcated )事務,每個方法調(diào)用可能實際上在它自己的分離的事務中執(zhí)行。用這種形式執(zhí)行多個網(wǎng)絡調(diào)用將導致嚴重的性能下降。

          我們的解決方案是生成一個稱為數(shù)據(jù)傳送對象( Data Transfer Object,DTO )的普通 Java 類,它代表一些服務器端數(shù)據(jù)的快照 , 該對象在一個網(wǎng)絡調(diào)用中封裝了批量數(shù)據(jù)。

          在一個分布式系統(tǒng)中可以把 DTO 用作讀取操作和更新操作。當一個客戶端需要更新服務器上的一些數(shù)據(jù)時,它能創(chuàng)建一個封裝所有服務器需要去更新的信息的 DTO, 并傳到服務器去處理,服務器讀取 DTO 中的數(shù)據(jù),然后進行相應的處理。當一個客戶端需要服務器中的數(shù)據(jù)時,只要向服務器端發(fā)送一個消息,服務器將數(shù)據(jù)組裝成 DTO ,然后將此 DTO 做為消息調(diào)用的返回值返回給客戶端。

          下面時讀取數(shù)據(jù)的活動圖

          posted on 2006-03-21 00:42 CowNew開源團隊 閱讀(2099) 評論(1)  編輯  收藏

          評論

          # re: DTO模式和SessionFacade模式的應用(一) 2006-04-26 15:19 f
          fdsafdsafdsafdsafdsa  回復  更多評論
            


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          主站蜘蛛池模板: 铅山县| 报价| 塔河县| 西盟| 兰溪市| 化隆| 涟源市| 喀喇沁旗| 辽阳县| 南岸区| 南昌县| 洛隆县| 饶阳县| 寿光市| 剑川县| 鹿泉市| 济阳县| 封丘县| 礼泉县| 大兴区| 张家口市| 内丘县| 元朗区| 外汇| 民丰县| 甘肃省| 周口市| 潮安县| 于都县| 肥东县| 忻州市| 巴中市| 萍乡市| 哈密市| 五华县| 昌黎县| 阳新县| 左云县| 莲花县| 方城县| 安顺市|