Velocity在Roller中的應用

Velocityjava世界中出現比較早,也比較成熟的、性能比較好的、應用也比較廣泛的模板框架。

 

所謂模板,就是定義一套不變的模型,並用其生成一些動態的東西。最常見的是應用場景是動態網頁,我們知道一些網頁大部分內容是不變的,只有少數內容需要改變,比如當前瀏覽網頁的用戶名等。除了這種場景,在自動生成代碼方面,模板技術的應用也是常見的。

 

那麼,在Rollervelocity是被用來幹什麼呢?簡單地說,其實也是用來生成網頁的。不過,除了生成網頁,還要把生成的結果緩存起來。

 

本文中主要討論Roller如何應用velocity進行設計及其啓示。以下是Roller關於velocity的類圖:

Roller定義了兩個類:RendererRendererManager,在Roller中所有跟velocity相關的操作都從這兩個類開始!

 

可能你有點疑惑,模板有很多,並且放置的地方也不同。這兩個類怎麼知道我要的是那個模板?

 

RendererManager的靜態方法 getRenderergetRenderer(Template template)中,參數帶有一些關於模板的信息,比如名稱、ID等。其實,RendererManagerVelocityRendererFactory代爲其幹活。VelocityRendererFactory簡單new 一個VelocityRenderer對象並將其返回給應用。

 

VelocityRenderer對象被實例化的時候將得到一個真正的Velocity  模板對象,真正幹活的也是Velocity,不是RollerVelocityRenderer

 

VelocityRenderer是如何得到Velocity的模板對象的呢?答案是通過RollerVelocity

RollerVelocity會被實例化一個Velocity引擎,並且通過Velocity的專有配置文件Velocity.properties文件確定有那些渠道可以取到模板!見類圖中的ResourceLoader實現類。

 

啓示:

1、我們在工作中會用到很多第三方軟件(如,Velocitypoijxl等),我們是否也爲用到這些第三方軟件的同事屏蔽如何使用第三方軟件(即會用RendererRendererManager即可)?這樣其他人就不需要花時間去學習如何使用第三方軟件了,既提高效率又利於維護。

 

2、如果有更好的模板技術出現,你要讓它代替Velocity,工作量如何?怎麼做?

 

3、當前我用Roller進行二次開發,有一個客戶關係模塊需要應用模板技術進行個性化的發送郵件、短信。我實現起來非常方便,分別實現加載郵件、短信模板的ResourceLoader就可以了,其他地方不需要改動。難道設計Roller的人預見我會有這個需求了嗎?

 

 

 

發佈了35 篇原創文章 · 獲贊 2 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章