2011-09-28 87 views
0

在Grails控制器操作中,对于验证,我们使用命令对象。问题是CommandObject类的数量已经爆炸。Grails控制器,命令对象explotion

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成为innerClass?或者我不需要创建这么多课程的其他方式?

+0

正如约书亚摩尔所说,绝对可以将它们添加为内部类......我很好奇,是什么导致命令对象的增长?我只问,因为当我第一次在Grails开始时,我发现自己更频繁地使用它们,因为我没有充分利用Grails的GSP表单 - >域映射功能。现在我发现自己只用它来搜索我没有使用@Validatable域类的地方。 – proflux

+0

可以使用一些参数来封装从控制器传递到服务的“消息”。我说“消息”是指对象传递消息的OOP。通过使用命令对象,您可以定义控制器和服务之间的契约。此外,该合同可以被控制器以外的其他接口(例如ESB)重新使用。 –

+0

我对这个特例更加好奇。声明“这些类的数量已经爆炸,1为应用程序的每个操作都创建了一个。”表明可能有一些Grails的功能可能有助于从根本上解决问题。 – proflux

回答

3

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