2011-03-01 55 views
2

我讀到服務用於跨多個域類的更新。但是,我有命令類,並且我想知道將事務更新的邏輯放入命令類是否存在重大缺陷(或打破了Grails範例)。喜歡的東西:在Grails中使用命令對象進行更新

class ObjectOneCommand { 
... 
    def save() { 
     objectOneInstance.save() 
     objectTwoInstance.save() 
    } 
} 

並在控制器

ObjectOne.withTransaction { transactionStatus -> 
    objectOneCommand.save() 
} 

回答

4

我只是新的Grails,但是從我的理解,命令對象基本上是一個聰明的方式做數據綁定傳入參數,以便您可以進一步驗證它們,或者對它們進行一些處理。本質上它是從領域類本身進行領域模型約束檢查,並在將屬性傳遞給領域對象以進行持久性(通常通過服務)之前對屬性進行按摩。

因此命令對象(對我來說)不是域對象上的事務業務邏輯的地方。

此外,由於可以將服務注入其他類,因此可以以這種方式在服務中重用業務邏輯。如果將邏輯放置在命令對象中,依賴注入不是您的選擇,您可能會在不同的命令對象之間重複邏輯。

因此,既然你可以注入服務到你的命令類中,所以我想這對你來說可能是合理的。

0

一般來說,這違背了Grails範式,也是大多數MVC範式。正如Ciaran指出的那樣,您在Command和Controller類中放置的邏輯不可重用。您將無法從其他控制器(很容易)調用它,因此您可能最終會一次又一次地重寫它。在你的服務中做一個方法來做這個持久化,使用def transactional = true會好很多。