在Grails中使用命令对象进行更新

我读到服务用于跨多个域类的更新。但是,我有命令类,我想知道将事务更新的逻辑放入命令类是否有明显的缺点(或打破Grails范例)。就像是:
class ObjectOneCommand {
...
    def save() {
        objectOneInstance.save()
        objectTwoInstance.save()
    }
}
并在一个控制器
ObjectOne.withTransaction { transactionStatus ->
    objectOneCommand.save()
}
    
已邀请:
我只是Grails的新手,但据我所知,命令对象基本上是一种聪明的方法,可以对传入的参数进行数据绑定,以便您可以进一步验证它们,或者对它们进行一些处理。本质上,它是从域类本身进行域模型约束检查,并在将属性传递给域对象以进行持久化(通常通过服务)之前对其进行按摩。 因此,命令对象(无论如何)不是域对象上事务业务逻辑的位置。 此外,由于服务可以注入其他类,因此您可以通过这种方式在服务中重用业务逻辑。如果将逻辑放在命令对象中,则依赖注入不是您的选项,您最终可能会在不同的命令对象之间复制逻辑。 因此,您可以将服务注入到命令类中,所以我想您可以沿着这条路走下去。     
一般来说,这是针对Grails范式的,也是大多数MVC范例。正如Ciaran指出的那样,你在Command和Controller类中放入的逻辑是不可重用的。您将无法从其他控制器(轻松)调用它,因此您可能会一次又一次地重写它。在你的服务中使用
def transactional = true
来实现这种持久性的方法会好得多。     
查看此链接,作者David Dawson建议使用命令对象为传入请求建模并在整个请求期间维护状态。我不确定这是好主意还是坏主意,但它与你所描述的非常相似。 http://www.simplicityitself.com/article/all-hail-command     

要回复问题请先登录注册