【问题标题】:Grails controller, Command Object explotionGrails 控制器,命令对象爆炸
【发布时间】: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


【解决方案1】:

将命令对象类放在与控制器相同的 .groovy 文件中(在控制器类之后)是很常见的做法。这将有助于减少您必须管理的文件数量。否则,您将遵循最佳实践(根据您的描述)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 2011-02-25
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 2015-10-17
    相关资源
    最近更新 更多