2011-09-28 61 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文件中(在控制器類之後)是一種很常見的做法。這將有助於減少必須管理的文件數量。否則,您正在遵循最佳實踐(從您所描述的內容開始)。