1.定義
在某種特定的上下文中反覆出現的一個“問題/解決方案”對子。
2.模式共同特點
l 模式是通過經驗觀察得出的。
l 一般來說模式都按一種專門的結構格式來記錄。
l 採用模式能夠避免重新發明輪子。
l 不同的模式處於不同的抽象層次上。
l 模式要經歷不斷的改進、完善。
l 模式是可以重用的工件。
l 模式可以用來讓大家交流系統設計和最佳實踐。
l 多個模式可以拼合起來,從而解決一個大型問題。
3.軟件模式類型
l 設計模式
l 架構模式
l 分析模式
l 創建型模式
l 結構型模式
l 行爲型模式
4.J2EE模式
即是設計模式也可算是架構模式,並可按邏輯分三類:
u 表現層
u 業務層
u 集成層
4.1表現層
攔截過濾器
前端控制器
Context對象
反應控制器
視圖助手
複合視圖
服務到工作者
分配器視圖
4.2 業務層
業務代表
服務定位器
會話門面
應用服務
業務對象
複合實體
傳輸對象
傳輸對象組裝器
值列表處理器
4.3 集成層
數據訪問對象
服務激活器
業務領域存儲
Web Service中轉
5 模式框架
在一個整合的應用場景下的一組模式集合。要在模式的層面上把解決方案組合起來,或把組件裝配到一起。
不僅需要孤立地理解單個模式,還必須注重它們之間的關係和組合;如何才能最好地把多個模式連接在一起,形成大的解決方案。
模式驅動的開發過程:
l 確定應用場景,爲系統每個層次提出合適的模式。
l 確定模式組合(或者說解決方案的主旨),從而給出模式框架。
l 爲系統方案中的每個角色選定具體實現策略。
6.按邏輯劃分的五層模型
6.1 客戶端層
應用客戶端、Applet、應用程序和其他GUI:用戶交互、UI表現和UI設備。
客戶端可以是web瀏覽器,java應用程序,wap手機之類。
6.2 表現層
JSP、Servlet和其他UI元素:集中登錄、會話管理、內容創建/內容格式/內容傳遞。
封裝了服務於訪問系統的客戶端的所有表現邏輯。攔截了客戶端的請求,提供單一的登錄入口,構造了會話管理,控制了對業務服務的訪問,構建了響應,並把響應傳送到客戶端。Servlet和jsp本身不是UI元素。
6.3 業務層
EJB和其他業務對象:業務邏輯、事務、數據、服務。
業務一般在這層,但也可能在遺留系統。
6.4 集成層
JMS、JDBC、連接器和遺留系統:資源適配器、遺留/外部系統、規則引擎、工作流。
使用JDBC、J2EE連接器技術、某種廠商專有的中間件,從而於資源層協作。
6.5 資源層
數據庫,外部系統和遺留資源:資源、數據和外部服務。
業務數據於外部資源。
7.模式關係圖
8.模式應用
8.1表示層模式
n 對請求做預處理或後處理:攔截過濾器
n 在請求處理中加入日誌、調試以及其他操作:前端控制器、攔截過濾器
n 集中對請求處理的控制:前端控制器、攔截過濾器、應用控制器
n 爲降低控制器組件和助手組件間的耦合度,創建通用的命令接口或context對象:前端控制器,應用控制器,Context對象
n 控制器應該用servlet還是JSP實現:前端控制器
n 從多個子視圖創建一個視圖,複合視圖
n 視圖應該用servlet還是jsp實現,視圖助手
n 如何劃分視圖和模型:視圖助手
n 在那裏封裝表現層相關的格式化數據邏輯:視圖助手
n 助手組件應該用JavaBean還是定製標籤實現:視圖助手
n 合併多個表現層模式:攔截過濾器,分配器視圖
n 在哪裏封裝選擇、分派視圖的視圖管理/導航邏輯:服務到工作者,分配器視圖
n 在哪裏保存會話狀態:在客戶端保存會話狀態,在表現層保護會話狀態,在業務層保護會話狀態
n 控制客戶端對特定視圖或子視圖的訪問:控制客戶端訪問,對客戶端隱藏資源
n 控制對應用系統請求的流程:重複的表單提交,引入同步令牌
n 控制重複的表單提交:重複的表單提交,引入同步令牌
n 利用<jsp:setPropertity>的JSP標準屬性複製機制時,包含的設計問題:助手類屬性——完整性和一致性
n 分離數據訪問代碼:分離數據訪問代碼
8.2業務層模式
n 儘量減少表現層和業務層之間的耦合:業務代表
n 爲客戶端緩存業務服務:業務代表
n 隱藏業務服務的尋址/創建/訪問的實現細節:業務代表,服務定位器
n 隔離服務尋址中的特定廠商/技術的依賴:服務定位器
n 爲業務服務的尋址和創建提供統一的方法:服務定位器
n 隱藏EJB和JMS組件尋址的複雜度和依賴性:服務定位器
n 在業務對象和客戶端間,不同層間傳輸數據:傳輸對象
n 爲遠程客戶端提供簡單,統一的接口:業務代表,會話門面,應用服務
n 爲訪問業務層組件提供粗粒度方法,從而減少遠程方法調用:會話門面
n 管理EJB組件之間的關係,隱藏交互複雜度:會話門面
n 避免使業務層組件直接暴露給客戶端:會話門面,應用服務
n 爲訪問業務層組件提供統一的邊界:會話門面,應用服務
n 用對象實現複雜的業務領域概念模型:業務對象
n 爲對象實現複雜的業務領域概念模型:業務對象
n 爲業務對象和entity bean的設計找出粗粒度對象和從屬對象:業務對象,複合實體
n 設計粗粒度entity bean:複合實體
n 減少或消除entity bean客戶端對數據庫結構的依賴:複合實體
n 減少或消除entity bean之間的遠程關係:複合實體
n 減少entity bean數量,提高可維護性:複合實體
n 從多個業務層組件中獲取應用數據模型:傳輸對象組裝器
n 輕鬆構造應用數據模型:傳輸對象組裝器
n 對客戶端隱藏數據模型構造的複雜性:傳輸對象組裝器
n 提供業務層查詢和結果列表處理:值列表處理器
n 儘可能減小使用EJB finder方法帶來的負載:值列表處理器
n 在服務器端爲客戶端提供具有向前/向後導航功能的查詢結果緩存:值列表處理器
n 選用有狀態session bean還是無狀態session bean的權衡:“session bean--無狀態vs有狀態”
n 保護entity bean,禁止客戶端直接訪問:用session bean包裝entity bean
n 封裝業務服務,隱藏業務層實現細節:引入業務代表
n 在entity bean中包含業務邏輯:entity bean中的業務邏輯,將業務邏輯移至session bean
n 把session bean作爲粗粒度業務服務提供:合併session bean,用session bean包裝entity bean。
n 減少和/消除由entity bean之間的通信引起的網絡和容器負擔:減少entity bean之間的通信
n 分離數據訪問代碼:分離數據訪問代碼
8.3集成層模式
l 儘可能減小業務層和資源層之間的耦合:數據訪問對象
l 集中對資源層的訪問:數據訪問對象
l 儘可能減小業務層組件中訪問資源的複雜度:數據訪問對象
l 爲企業應用提供異步處理能力:服務激活器
l 向業務層發送異步請求:服務激活器
l 把請求作爲一組並行任務異步處理:服務激活器
l 透明地實現對象模型持久化:業務領域存儲
l 實現定製持久化框架:業務領域存儲
l 用XML和標準Internet協議暴露WebService:Web Service中轉
l 把現存服務聚合,中轉爲WebService,Web Service中轉