2016-01-21 49 views
0

所以我想創建3個插件,其中包括域類和一個寧靜的服務,以及誰建立在彼此之上。在Grails中使用traits進行水平域類重用,是個好主意嗎?

概念,他們會「繼承」的基本模型是這樣的:不過,我已經閱讀從友好手冊:繼承可能會導致一些性能問題

記錄>人物>用戶

然後它突然想到,由於Groovy具有橫向重用功能(即特徵),因此我可能只需定義特徵中的所有內容,然後在該領域類中實現該特徵。

由於字段的重命名以及IDE自動完成方便性的喪失,編寫域類不是我的選擇。

我的兩個問題是:

  • 在什麼Grails工程結構的一部分會是最好的地方,這些特質。
  • 這可能導致不同的問題?

回答

3

性狀源代碼應在

  1. 的Grails 2:的src /常規/ [包] [whatever.groovy]
  2. 的Grails 3:的src /主/常規/ [包] [whatever.groovy]

例如:src/main/groovy/com/my/package/foo.groovy

您將遇到的主要問題是您將失去執行多態查詢的能力。例如,對於繼承,你可以做這樣的事情:

def everything = Record.list() 

everything將包含RecordPersonUser實例。有點像SQL聯合查詢。當使用特質而不是繼承時,你會放棄這個能力。

相關問題