Grails:普通 class 和命令对象之间的区别?

Grails: difference between a plain class and a command object?

在 Grails 中,可以通过调用 ClassNameCommand 来定义一个 Command 对象 class,并将其用作传递数据的容器。但是这和 /src/ 中定义的普通 class 有什么区别?

这个问题源于 ,当时有人建议创建一个 Command 对象,但似乎从域 class 继承的普通 class 也能正常工作。 ..

命令对象没有命名约定,除非您使用我不知道的插件。

有两种方法可以将 class 视为命令对象;标准的方法是使用 class 作为控制器操作方法中的方法参数。所有操作方法参数都受制于数据绑定,对于简单类型(String、Long 等)这很简单。如果您使用 class 作为参数,它被认为是一个命令对象,并且 AST 转换将其扩展为具有 grails.validation.Validateable 注释,并添加验证方法(例如 validategetErrors, 等等)通常这些 classes 定义在与它们使用的控制器相同的文件中,如果只有 class 使用它,这是有意义的。

或者,您可以使用 src/groovy class 作为命令对象 - 只需自己对其进行注释即可。如果 class 被多个控制器使用,这是一种很好的方法。

这是描述 in the docs(忽略 "A class is only considered to be a command object ..." 注释)。