2014-04-24 68 views
0

我想包括「創造」和我所有的領域類的「修改」字段和想如果可能的話,以擁抱DRY原則。我不想擴展每個類,因爲我不能再次這樣做,所以我試圖實現一個接口。的Grails - 接口而不是抽象類

考慮:

interface AutoTimeStamp{ 

    Date created 
    Date modified 
} 

class Dog implements AutoTimeStamp{ 
    String breed 
} 

class Cat implements AutoTimeStamp{ 
    String noOfLives 
} 

但是當我嘗試創建一個新的狗或貓,我得到:

無法設置「創造」,因爲後備字段是 最後的財產。

任何想法,爲什麼這似乎是非法的?這就像一個擴展類的魅力一樣。

+1

看看[** autotimeStamp **](http://grails.org/doc/latest/ref/Database%20Mapping/autoTimestamp.html)。你不需要任何接口。 – dmahapatro

+0

@dmahapatro你應該讓這個回答 –

回答

1

以上的答案是正確的,定義了你需要做的屬性接口:

interface AutoTimeStamp{ 

    Date getCreated() 
    void setCreated(Date created) 
    Date getModified() 
    void setModified(Date modified) 
} 

然後在實現類可以定義屬性

Date created 
Date modified 
1

dateCreatedlastUpdated是在域類默認情況下可用。

如果要禁用autoTimestamp然後使用:

static mapping = { 
    autoTimestamp false 
} 
+0

不好意思,剛纔回來這個有點晚了。我是否錯過了上面的內容?我認爲我仍然需要爲每個Domain類添加「Date dateCreated」和「Date lastUpdated」? – dre

+0

是的,正確的。如果你有特定的列,那麼它們可以映射到'mappings'塊中。 – dmahapatro

+0

好吧,最初的意圖是將其抽象爲一種超類,以便每個需要此功能的域只實現或擴展。顯然前者是首選。我想首選的選擇是不可能的。 – dre