Turbine框架
首先,必須承認,turbine作為一個開發框架,已經快絕跡了,阿里巴巴的webx框架是基于turbine做的,所以這里簡單介紹一下,如果是阿里系新入職的同學,可以參考一下,當然任何開發人員如果感興趣turbine的設計,都歡迎。
turbine是什么?
turbine是一個應用開發框架,是一個開發web應用的工具箱,100%純java,且基于jdk1.3及以上。j2ee兼容且基于servlet,面向MVC構建。
turbine的框架架構overview如下:
turbine的代碼結構包含了services、modules和util幾個大類,在上圖中可見,在servlet基礎之上,以MVC為基礎結構,modules包含了view部分及action,view主要是pages,其中有三種具體的module——screen、layout和navigation,action作為controller存在,toolbox提供了很多通用的tool,service則是整個框架的插件。一個完整的請求處理流程如下:
請求到來,turbine的controller處理,view部分渲染頁面,然后響應輸出。
就順著這個流程,分析一下turbine的架構,對于view部分,我們最直觀想到的就是pages,page模塊值包含了幾個概念,是jsp的?還是velocity的?僅此而已。那么,以一個velocity頁面為例,如何組織呢?turbine講究的是“約定勝于配置”,記住這句真言,也就可以理解turbine了。在開發應用中,要建立三個頁面目錄,分別是screen、layout和navigation,screen是頁面的主體內容,layout是頁面的布局,而navigation則是一些頁面修飾元素,比如下面這個頁面結構:
這三個部分的調用順序如下:
因為約定的代碼結構是在三個目錄下寫對應名字的java代碼,因此名字如果不一致,那么就會出錯。當然,頁面模板目錄有默認的結構,如果在對應的目錄下找不到文件,就會讀取default.vm文件。
類似servlet,寫一個java文件對應處理screen頁面,那么代碼可能是這樣的:
可以看到,這種處理代碼很像servlet,方法就像是servlet標準中的doGet和doPost,只不過參數進行了封裝。其實,turbine就是一個servlet,看看turbine的源碼,Turbine類繼承了HttpServlet,實現了doGet和doPost方法,除了一開始初始化一系列配置相關的變量外,在接到一個http請求(get)后,turbine會執行doGet方法,turbine封裝了request和response,構建了一個叫做RunData的對象,Rundata是個接口,具體實現是DefaultTurbineRunData,其內部提供了獲取http各種數據的方法接口。在每個請求周期,turbine都會利用TurbineRunDataService新建一個RunData,將所有基于servlet的請求相關的東西塞到這個data中。然后,利用從request中得到的請求地址,再調用PageLoader找到對應的Page,執行其中的build方法,其中DefaultPage里會通過LayoutLoader和ScreenLoader來定位到對應的layout和screen,然后執行其中的build相關方法。這樣,一整套請求執行就完成了。值得說明的就是如果是表單提交,那么多數情況會多出一個action的執行,也是在page里進行的。如下圖
至于turbine中的tool,這類工具是通過配置,以“拉”模式被應用的。當應用啟動后,在vm頁面中以$開始調用某個tool的時候,就會初始化這個tool。當然,這里就用到了TurbinePullService。
在初步了解了turbine后,如果使用過webx,那么就會知道并一定程度理解了webx的設計;沒使用過的,結合自己用過的mvc框架,也可以了解一些框架設計的思路。
參考資料:
本文全部圖片都截取自Turbine Tutorial,使用請注明
posted on 2012-05-17 13:54 changedi 閱讀(2749) 評論(2) 編輯 收藏 所屬分類: Java技術