2012-03-02 56 views
3

假設我的應用程序中有類域,類似於一些Long,Double,Date和String字段。這些類使用一些常用字段和幾個常用方法來擴展基類。每當我訪問類字段(雖然getter)是String時,我想對返回的值進行一些更改(例如,移除html標籤)。有沒有更好的方法比字符串類型的每個字段的getter的實現?關於繼承領域呢?修改字符串字段的getter的返回值

回答

1

不要更改由Grails爲您創建的默認getter/setter實現。你肯定會在各個地方弄亂你的應用程序。 Grails使用約定而不是配置,所以getters/setters應該保持不變。

創建你自己的方法,返回你想要的:對於字段標題create方法getStrippedTitle()。您也可以將此方法添加到瞬變中。

+0

感謝您的回答。這與Burt Beckwith提供的非常相似,所以我的評論也適用於此。 – Aidas 2012-03-02 18:22:27

1

如果更改設置的值,或者返回的值與設置的值不同,則會混淆Hibernate。這是因爲當你從數據庫加載一個實例時,Hibernate將原始數據保存在它的第一級緩存中,並向你返回一個域對象實例。在刷新時,它會將當前狀態與原始狀態進行比較,如果更改,則會將更改推送到數據庫。所以如果你返回一個與設置值不同的值,但是並沒有真正改變它的值,那麼Hibernate就無法區分它們。

單獨留下屬性並創建返回更改數據的方法會更好。我用過的一個約定是,如果你有一個String body字段,你可以通過屬性名body或者獲取者getBody()來訪問它,但你可以創建一個Hibernate未知的方法,並返回你想要的任何東西。

+0

我同意你的警告。但我不是在談論映射到數據庫的實際域類。我使用的可能是傳輸對象(使用SomeJson類將jsons形成客戶端並從客戶端獲取數據解決了非常特殊的情況)。並且在每個這樣的類中的每個字段的函數方法中實現getter或類似的東西正是我想要避免的。嘗試了一些元編程的東西沒有成功,因爲它對我來說是非常新的... – Aidas 2012-03-02 18:20:20