【发布时间】:2011-09-28 22:40:21
【问题描述】:
在 Grails 控制器动作中,为了验证,我们使用命令对象。问题是 CommandObject 类的数量激增。
def publish = { PublishCommand command ->
if (command.hasErrors()) {
return redirect(action: 'errors',params:params)
}
//rest of the code
}
......
Class PublishCommand {
long personId
String name
static constraints = {
personId(nullable: false, blank: false)
name(nullable: false, blank: false)
}
}
PublishCommand 类仅用于此数据绑定和验证目的。此类类的数量激增,为应用程序的每个操作创建了 1 个。 问题是,有没有办法可以让这个 PublishCommand 作为内部类?或者我不必创建这么多类的其他方式?
【问题讨论】:
-
正如 Joshua Moore 所说,绝对可以将它们添加为内部类......我很好奇,是什么导致命令对象的增长?我之所以这么问,是因为当我刚开始使用 Grails 时,我发现自己更频繁地使用它们,因为我没有充分利用 Grails 的 GSP 表单 -> 域映射功能。现在我发现自己只在没有@Validatable 域类可使用的情况下将它们用于搜索之类的事情。
-
可以使用一些参数来封装从控制器传递到服务的“消息”。我在对象传递消息的 OOP 意义上说“消息”。通过使用命令对象,您正在定义控制器和服务之间的合同。此外,该合约还可以被控制器以外的其他接口(例如 ESB)重用。
-
我对这个特殊案例更加好奇。声明
Number of such classes have exploded, 1 created for each of the action of the application.向我表明,Grails 的某些功能可能有助于从根本上解决问题。 -
@proflux 我们有很多 ajax 请求进入各种操作。它们不一定在单个域上运行。因此,为了验证并在控制器和服务之间发送一些标准的“消息”(如 Joshua 提到的),我们开始放入命令对象。但随着应用程序的增长,CommandObjects 的数量不断增长。所以我在想可能有更好的方法。
标签: grails controller command-objects