如鵬網 大學生計算機學習社區

          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開源團隊 閱讀(2100) 評論(1)  編輯  收藏

          評論

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


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


          網站導航:
           
          主站蜘蛛池模板: 乌审旗| 大兴区| 攀枝花市| 通山县| 岳阳县| 浑源县| 馆陶县| 芮城县| 江门市| 昭通市| 珲春市| 理塘县| 云南省| 鄂尔多斯市| 梁河县| 鹤壁市| 华亭县| 巴青县| 浪卡子县| 措勤县| 安福县| 湖州市| 固安县| 罗平县| 广元市| 莲花县| 乳源| 平江县| 西丰县| 潼南县| 海宁市| 巍山| 长汀县| 会同县| 新民市| 淮滨县| 江安县| 黑水县| 象州县| 渭源县| 紫阳县|