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

Posted

技术标签:

【中文标题】Grails:普通类和命令对象之间的区别?【英文标题】:Grails: difference between a plain class and a command object? 【发布时间】:2015-05-10 18:43:08 【问题描述】:

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

这个问题源于Grails: Is it possible to prevent a domain class instance from being persisted?,当时有人建议创建一个 Command 对象,但看起来从 Domain 类继承的普通类也可以工作......

【问题讨论】:

【参考方案1】:

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

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

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

这被描述为in the docs(忽略“一个类只被认为是一个命令对象......”注)。

【讨论】:

嗨,伯特。感谢您经常回答 Grails 问题。所以你是说附加到类名的“命令”实际上并不重要,就像“服务”或“控制器”一样? 是的 - 名称规则仅适用于(大多数)工件,但这些不是正式的工件。

以上是关于Grails:普通类和命令对象之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章

在 Grails 中存储和编辑键/值对?

命令对象和 DTO,区别?

静态内部类和非静态内部类的区别

静态内部类和非静态内部类的区别

普通类抽象类和接口区别:

抽象类和普通类的区别