Raible給AppFuse這個(gè)Web應(yīng)用寫(xiě)了好幾種實(shí)現(xiàn)方式,有Struts Spring Hibernate、Spring iBATIS、WebWork Spring Hibernate、JSF Spring Hibernate、Tapestry Spring Hibernate 等等。目前在國(guó)內(nèi)最流行的應(yīng)該就是Struts Spring Hibernate了,就以這種框架為例介紹AppFuse吧。
Struts Spring Hibernate使用了基于MVC模式的struts的框架,并使用hibernate進(jìn)行持久層操作,使用Spring對(duì)各個(gè)組件進(jìn)行“依賴注射”。通過(guò)這種設(shè)計(jì)模型把應(yīng)用邏輯,處理過(guò)程和顯示邏輯分成不同的組件實(shí)現(xiàn)。這些組件可以進(jìn)行交互和重用,具有組件化的優(yōu)點(diǎn)從而更易于實(shí)現(xiàn)對(duì)大規(guī)模系統(tǒng)的開(kāi)發(fā)和管理。使用AppFuse,你應(yīng)該對(duì)Struts和Hibernate有一定的了解。
下面分別介紹各層的功能:
1. Controller:控制器的作用是從客戶端接受請(qǐng)求,并且選擇執(zhí)行相應(yīng)的業(yè)務(wù)邏輯,然后把響應(yīng)結(jié)果送回到客戶端。Controller功能核心是一個(gè)Servlet類型的對(duì)象ActionServlet,它用來(lái)接受客戶端的請(qǐng)求。ActionServlet包括一組基于配置的ActionMapping對(duì)象,每個(gè)ActionMapping對(duì)象實(shí)現(xiàn)了一個(gè)請(qǐng)求到一個(gè)具體的Action控制器對(duì)象之間的映射。所有的Action對(duì)象都是從Struts的Action類派生的子類。Action對(duì)象封裝了具體的控制邏輯,調(diào)用Model層的業(yè)務(wù)邏輯模塊,并且把響應(yīng)提交到合適的View組件以產(chǎn)生響應(yīng)。Struts提供的ActionForm組件對(duì)象為顯示提供一個(gè)模型,可以通過(guò)定義屬性描述客戶端表單數(shù)據(jù)。從它派生子類對(duì)象,利用它和Struts提供的自定義標(biāo)記庫(kù)結(jié)合可以實(shí)現(xiàn)對(duì)客戶端的表單數(shù)據(jù)的良好封裝和支持。通過(guò)ActionForm組件對(duì)象實(shí)現(xiàn)了對(duì)View和Model之間交互的支持。同時(shí),控制器會(huì)負(fù)責(zé)處理異常及UI驗(yàn)證
2. Model:代表的是應(yīng)用的業(yè)務(wù)邏輯。Model分為兩層:持久層和業(yè)務(wù)層,用這種模式將底層數(shù)據(jù)訪問(wèn)操作與高層業(yè)務(wù)邏輯分離開(kāi)。持久層使用ORM開(kāi)源框架:Hibernate。 Hibernate為java提供了OR持久化機(jī)制和查詢服務(wù)。業(yè)務(wù)層框架使用Spring。Spring著手于“依賴注入”這樣的概念。Spring把程序中所涉及到包含業(yè)務(wù)邏輯和Dao的Objects——例如transaction management handler(事物管理控制)、Object Factoris(對(duì)象工廠)、service objects(服務(wù)組件)——都通過(guò)XML來(lái)配置聯(lián)系起來(lái),降低了各個(gè)組件的耦合度。
3. View:View是應(yīng)用的表示面,通過(guò)JSP技術(shù)實(shí)現(xiàn)。Struts提供了自定義的標(biāo)記庫(kù)可以使用,通過(guò)這些自定義標(biāo)記可以非常好地和系統(tǒng)的Model部分交互,通過(guò)使用這些自定義標(biāo)記創(chuàng)建的JSP表單,可以實(shí)現(xiàn)和ActionForm的映射,完成對(duì)用戶數(shù)據(jù)的封裝。
Action調(diào)用Model層方法時(shí)通過(guò)讀取Spring框架配置文件來(lái)創(chuàng)建實(shí)例。Spring框架控制主體公共部分,而把用戶要使用的部分定義了接口,然后用Spring框架調(diào)用這個(gè)接口,實(shí)現(xiàn)回調(diào)。Model層分為兩層:業(yè)務(wù)層(Manager)和持久層(DAO),每一層又分接口和實(shí)現(xiàn)兩部分。Action調(diào)用Manager層的接口,Manager的Implement實(shí)現(xiàn)高層業(yè)務(wù)邏輯并調(diào)用DAO接口實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的操作。這三層之間的調(diào)用均通過(guò)Spring的“依賴注入”機(jī)制實(shí)現(xiàn)。