熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

JavaOne大會發布《J2EE核心模式》第二版

2013-11-23 19:42:36  來源: Java高級技術 

  /
  by Dan Malks和Deepak Alur
  June
  
  
  
  在年的JavaOne大會上我們推出了《JEE核心模式》裡面包含一個模式目錄該模式目錄中涉及了個JEE的設計模式這些模式是JEE平台下軟件設計師和系統架構師經常遇到的典型問題及其解決方案這本書裡面也列舉了無數糟糕的實現並對它們進行了重構通過這些例子的學習你可以改善你現有的設計所有的這些模式都是在我們給客戶創建成功的JEE應用過程中被發現並提煉出來的
  
  
  
  模式與交流技術問題及其解決方案息息相關他們可以讓我們記錄一些反復出現的問題及其解決方案並與其他人進行交流寫《JEE核心模式》的一個動力就是人們常把學習JEE技術學習用JEE技術進行設計混淆起來現存的許多Java書籍大都介紹JEE技術的各個方面卻幾乎沒有哪本書介紹如何應用這些技術基於作為Sun專家服務Java中心的Java系統架構師的經驗我們覺得我們可以填補這個空白
  
  
  
  不過那已經是過去了下面我們談現在
  
  
  
  《JEE核心模式》第一版出版以後我們收到讀者對那個模式大量的反饋意見過去的幾年中JEE模式討論區非常活躍注冊會員也超過我們很高興能從jeepatte收到大量讀者的直接反饋意見這幾年中我們又做了幾個重要的大型JEE結構也參與幾個項目的開發其間我們不斷地應用這些模式同時又總結出了另外的一些模式
  
  
  
  基於大家的反饋以及我們在工作中取得的經驗年的JavaOne大會上我們又推出該書的第二版原有的個模式全部都進行了修正和更新引進許多新的實現策略和例程增加了有關Web服務(Web service)的內容覆蓋了最新的JEE我們又引進了個新的模式那麼現在一共有個JEE設計模式新增加的個模式主旨在於改進模式語言提供了高度抽象你可以用來構造和理解JEE應用
  
  
  
  模式目錄
  
  
  
  我們在第二版種引入了個新的模式每一層兩個
  
  表示層模式
  環境對象(Context Object)
  應用控制器(Application Controller )
  業務層
  應用服務(Application Service )
  業務對象(Business Object )
  集成層模式
  域存儲(Domain Store)
  Web服務代理(Web Service Broker )
  下面圖中顯示了模式目錄中的個模式分別顯示了各層中的模式顯示了各個模式之間的關系請注意所有的模式都已經修正並更新過包括了一些新的實現策略以及一些新的例程
   
  圖  表示層模式
   
  圖  業務層模式
   
  圖  集成層模式
   
  圖  各模式之間的關系
  精選模式
  
  
  
  這一部分我們對新引進的個模式的一小部分進行一個簡單的介紹其他更詳細的信息包括其他模式實現策略例程UML框圖糟糕的實現及JEE重構等請參考JEE核心模式
  
  
  
  雖然直到現在環境對象(Context Object)才被記錄為一個模式但是實際上我們在工作中會經常用到它環境對象(Context Object)的使用可以提高系統的的可復用性可維護性可擴展性以及易測試性下面我們介紹一下這個模式所涉及的問題解決方案UML類圖UML序列圖以及使用這個模式的後果
  
  
  
  環境對象(Context Object)
  
  
  
  問題
  
  你想避免在相關環境之外使用與系統特定協議有關的信息
  
  
  
  一個應用程序總是要通過請求/響應的生命周期使用一些系統信息比如請求信息配置信息以及安全性數據等這些系統信息總是與特定的處理環境有關如果應用程序的組件或服務在該特定環境之外直接使用這些系統信息的話那麼這些組件的靈活性和復用性就降低了在特定環境的外部使用協議相關的API就意味著所有使用這些API的組件都被完全曝露了並且過於暴露了細節每一個客戶組件因而都與特定的協議緊緊綁定在一起
  
  
  
  解決方案
  
  
  
  創建一個環境對象以一種與協議無關的方式封裝系統信息然後在整個應用程序內部使用這個環境對象
  
  
  
  如下面圖所示把系統信息封裝在一個環境對象中允許程序的其它部分共享訪問這樣就可以避免把應用同特定的協議綁定在一起比方說HTML form中每個域都是一個HTTP請求參數如果使用一個環境對象以一種與協議無關的方式存儲這些數據的話那麼數據的轉換和驗證就會變得容易一些而且程序的其它部分也可以直接從環境對象中訪問這些信息不用考慮HTTP協議的問題如果協議發生變化了那麼只用修改環境對象就行了應用程序的其它部分不用作任何改動
   
  圖 環境對象(Context Object)的UML類圖
  
  結果
  
  提高了可復用性和可維護性
  既然應用程序的接口獨立於特定協議那麼其中所定義的組件和子系統就更通用可以被各種各樣的客戶端復用
  提高了易測試性
  使用環境對象模式可以幫助清除與特定的Web容器或應用服務器相關的代碼如果限制或者消除了這些依賴可以更容易進行測試比如說可以使用一些自動測試工具例如使用JUnit來進行自動測試
  降低了接口變化的約束
  原來應用程序的接口接受大量的系統信息現在使用環境對象封裝這些數據應用程序只用接受環境對象就可以了這樣可以降低應用程序與特定平台的耦合度使得以後的修改可以更容易進行這對於開發應用程序框架非常重要當然對於開發通用程序也很有價值
  性能的降低
  使用環境對象模式要在對象間傳遞各種數據因而會導致一定程度性能的下降不過性能的些微下降與使用環境對象帶來的好處比如應用程序組件復用性提高應用更容易維護和修改等等比起來實在是微不足道
  我們在業務層模式中新增加了兩個模式其中之一就是應用服務(Application Service)這個模式與普通的業務邏輯有關因為如果使用Session Façades的話就會導致代碼重復而如果把這些邏輯封裝在業務對象(Business Object)的話又會導致對象數量的劇增
  
  
  
  應用服務(Application Service)
  
  
  
  問題
  
  
  
  你想跨越幾個業務層組件和服務通過聚合來形成一個業務邏輯
  
  
  
  服務門面(Service facade)像Session Façade或者POJO Façade幾乎不包含業務邏輯只是對外提供了一個簡單的粗糙的接口業務對象(Business Object)封裝了一組相關業務操作的行為用例(Use Case)用來協調這些業務對象和服務而應用程序則用來實現這些用例然而你不應該讓用例協調業務對象(Business Object)內部的行為這樣會增加依耦合性降低這些業務對象間的內聚力同樣你也不應該把業務邏輯加到服務門面(Service facade)上因為業務邏輯在不同的門面之間潛在地復制了代碼這樣會降低通用代碼的復用性和可維護性
  
  
  
  解決方案
  
  
  
  使用一個應用服務(Application Service)聚合各種行為來提供一個統一的服務層
  
  
  
  應用服務(Application Service)提供了一個實現業務邏輯的中心位置這個業務邏輯可能封裝了各種業務對象和服務這種實現業務邏輯的方式可以降低業務對象間的耦合性使用應用服務(Application Service)模式你可以把分散的使用底層業務對象和服務的組件封裝成為一個高級的業務邏輯
  
  
  
  即使你的應用程序中沒有用到業務對象(Business Object)你也可以使用業務服務(Application Service)模式來提供一個統一的業務邏輯實現層這種情況下應用服務(Application Service)可能會包含你程序中實現不同服務必需的所有中間業務邏輯如果要處理持久性數據的時候可能還會包括數據訪問對象(Data Access ObjectDAO)
  
  圖 應用服務(Application Service)

From:http://tw.wingwit.com/Article/program/Java/gj/201311/27338.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.