繼續上一篇博客,本篇博客介紹OFBiz的MVC框架。
1、OFBiz特點
OFBiz最基本的特點是OFBiz提供了一整套的開發基於Java的web應用程序的組件和工具。包含實體引擎、服務引擎、消息引擎、工作流引擎、規則引擎等。
2、關於OFBiz的版本號以及文檔
版本號一直在更新,如今更新到13.0.7了。
OFBiz的學習文檔,少之又少,國內的文檔都是過時了的,大多都是4.x的版本號,國外的文檔也非常少。所以本博客都會將自己研究的OFBIZ的東西分享出來。
3、OFBiz的MVC框架
OFBiz採用的是Service to Worker模式,大名鼎鼎的Struts 1採用的也是這樣的架構。Serviceto Worker模式的目標就是維護Action,View和Controller之間的分離。
Controller
OFBiz實現MVC是通過XML來串聯這三者之間的依賴關系。
這里牽扯到<view-map/>、<request-map/>、<handler/>這三個基本的XML元素。
這三個元素都定義在${applications}/WEB-INF/controller.xml中。上篇文章說過了此文件是定義view,controller之間的映射關系。不僅包括了請求的映射關系。同一時候還包括了視圖的映射關系,以及一系列的處理器不如視圖解析處理器,事件處理器等。看完這段話之后也不難理解為什么controller.xml就解耦了。以下詳細說一下他們是怎樣工作的?
配置文件內容例如以下:
<!--加入班級--> <request-mapuri="createClazz"> <securityhttps="true" auth="true"/> <eventtype="service" invoke="createClazz"/> <responsename="success" type="request-redirect"value="ViewClazz"> <redirect-parametername="clazzId"/> </response> <responsename="error" type="request-redirect"value="EditClazz"> <redirect-parametername="clazzId"/> </response> </request-map> <view-mapname="FindClazz"page="component://college/widget/ClazzScreens.xml#FindClazz"type="screen"/> <view-mapname="ViewClazz"page="component://college/widget/ClazzScreens.xml#ViewClazz"type="screen"/> <view-mapname="EditClazz"page="component://college/widget/ClazzScreens.xml#EditClazz"type="screen"/>
節點解析:
節點一:<Request-map/>
Request-map:通過名字也能夠看出這是請求的映射關系。Uri:表示要映射的請求。
本節點里面的幾個節點的意思:
Security:安全級別的設置,是否要進行權限檢查,是否應該是https的。
Event:此請求觸發的事件
response:請求的配置,第一個請求標簽的意思是說加入成功后跳轉到顯示頁面; 第二個請求標簽的意思是說加入有錯誤。跳轉到編輯頁面。理論上這個標簽中的name能夠自己定義名 字,只是ofbiz內置了success和error這兩個值,類似於struts2. value值相應於<view-map/>中的name屬性值。之所以不直接寫上頁面,一方面是為了解耦,還有一方面是為了能夠針對不同的view設置不同的type等屬性。屬性type="view"表示得到一個頁面。type屬性幫助ofbiz集成不同的顯示層技術。Common-controller定義了不同的type和其相應的ViewHandler。
節點二:<view-map/>
View-map:這個標簽是定義顯示界面的screen
此節點中的屬性:name定義當前view-map的名稱,和<request-map/>標簽中的<request/>標簽相相應
page定義當前前端展示的視圖布局文件
type:表示用什么技術展示視圖,通常為screen.
View
OFBiz支持非常多類型的頁面展示技術。JSP/FreeMarker/Velocity/PDF/Screen/widget等技術。widget是OFBiz自己封裝的一個特有的前台頁面技術。前面介紹過了。這樣一來OFBiz特別適合高速開發,開發一個模塊,對用戶進行增刪改查。會非常快,html,css基本都不用寫,僅僅須要寫view,services,entity等就能夠了。
相反對於不熟悉OFBiz卻認為它非常繁瑣。還不如自己封裝。
Model
OFBiz的實體引擎非常強大,而且靈活,開發者不須要JDBC知識,不用寫SQL語句。基本上,OFBiz封裝的可以解決大部分的數據庫操作。
Web運行過程
4、總結
View封裝的是對數據源Model的一種現實。
一個模型能夠有多個視圖。而一個視圖理論上也能夠用不同的模型關聯起來。
Model封裝的是數據源和全部基於對這些數據的操作。在一個組件中。Model往往表示組件的狀態和操作狀態的方法。
Control:封裝的是外界作用於模型的操作。通常這些操作會轉發到模型上。並調用模型中對應的一個或者多個方法。一般Controller在Model和View之間起到了溝通的作用。處理用戶在View上的輸入,並轉發給Model。這樣Model和View兩者之間能夠做到松散耦合。甚至能夠彼此不知道對方。而由Controller連接起這兩個部分。從而解耦。
看完OFBiz的MVC框架后,事實上它和Struts中的MVC模式非常相似。Struts MVC框架很多其它的是技術框架,主要目的是分離開發邏輯。使開發過程更easy協作分工。這樣就難勝任大規模企業級項目。OFBiz的MVC封裝的一套與業務相關的MVC。很多其它的是通過XML對系統進行建模。以XML來定義系統中不同的層次關系。盡量降低些Java代碼的數量。寫了一套以XML為基礎的mini language來做一些簡單的邏輯處理。在Struts中仍要寫大量的Java代碼。
從上面xml代碼中也不難看出來,OFBiz在代碼復用方面比struts好。