2016-10-02 75 views
0

我已經開始使用Freemarker來根據數據模型生成一些輸出。我面臨的問題是,爲了我的輸出生成,我一直在我的數據模型中公開方法。所以我有感覺爲我的Freemarker模板而「污染」我的數據模型。Freemarker數據模型污染

下面是一個例子:
我的數據模型,這是在我的情況的接口,提供了這種方法(改變名稱和類型說明):

Collection<MyPojo> getMyPojos(); 

爲了寫模板的方式,我想象一下,我需要根據一些條件過濾一些MyPojo。我首先想要在模板中完成它,但在模板中操作列表看起來相當複雜。
所以我結束了我的界面添加其他的方法來滿足需要:

Collection<MyPojo> getAddedMyPojos(); 
Collection<MyPojo> getRemovedMyPojos(); 

閱讀FreeMarker的文檔,我沒有找到一種方法,使用一些Fremarker API提供給模板處理器更多的方法。
有沒有更聰明的方式與Freemarker實現這一目標?我想保持我的界面乾淨,只有第一種方法。我是否需要創建專用的數據模型,擴展我的初始數據模型?或者創建一個Map並注入這個而不是我的datamodel(並用我的方法的結果填充它)?

謝謝!

+1

FreeMarker需要一個視圖模型。如果視圖很簡單,那麼直接使用數據模型通常就足夠了......但即便如此,很多人會認爲你不應該這樣做。如果您正在進行排序,過濾,計算等操作,那麼您的視圖應該有一個專門的模型:將存儲和視圖的關注分開。 –

+0

謝謝格倫給你評論。所以你認爲我不應該提供接口,而是提供實現,如果需要,我可以公開更多方法? – Xendar

+1

我會創建專用於您的FreeMarker模板的專用POJO。數據接口*或其實現都不應有任何涉及該觀點的擔憂或禮貌。我知道這聽起來不太符合OOP,但數據和觀點是非常獨立的問題。您可以讓「view POJO」將數據接口作爲構造函數參數,但我不會讓它意識到數據*實現*。 –

回答

0

正如Glenn Lane所提議的,最好隔離Freemarker的代碼。因此,實施專門的POJO