2014-02-28 85 views
2

我正在研究一個Grails項目,我試圖重構它,從類中提取代碼並將其放入Helper類中。我現在面臨的問題是,我已經結束了一堆傭工(這不是一個真正的問題),但主要問題是我有的靜態方法的數量。這是一個例子:MVC框架和靜態方法

public static format(myFoo){ 

    def nullOr = { it == JSONObject.NULL ? null : it } 
    ..... 
    .... 
    ... 
    parse(blah,blah,blah) 
    } 

    private static parse(parseFunc, value, errors){ 
    try { 
     parseFunc(value) 
     } catch (ApplicationException x) { 
     errors << x 
     value 
     } 
    } 

這是一個正確的方法嗎?這是Groovy,所以我應該使用靜態閉包嗎? 我打電話給我的助手,因爲這:

MyHelper.format() 

我應該刪除靜態,而是創建實例?什麼是最好的方法?

+0

您是否考慮過使用服務? –

回答

3

將代碼從Controller移動到外部類有很多種方法。但靜態方法可能是最糟糕的方式,你不能擴展這個方法,真的很難基於靜態的方法,使單元測試類等

的Grails有提供了一種特殊類型的類,正是針對這種情況:Services

所以,你可以創建MyService像:

def format(myFoo){ 

    def nullOr = { it == JSONObject.NULL ? null : it } 
    ... 
    parse(blah,blah,blah) 
} 

private parse(parseFunc, value, errors){ 
    try { 
    parseFunc(value) 
    } catch (ApplicationException x) { 
     errors << x 
     value 
    } 
} 

和控制器使用爲:

def myService 

def myAction() { 
    myService.format() 
} 

瞭解更多關於Grails服務的信息:http://grails.org/doc/latest/guide/services.html

你也可以將任何Class註冊爲Spring bean,並使用類似於Service的方法。請參閱http://grails.org/doc/latest/guide/spring.html

+0

你好,我想過使用服務,但我認爲幫助類更適合格式化數據等等。我可以爲幫助者做同樣的事嗎?定義一個「myHelper」並使用它? Ise服務的命名約定? –

+0

服務是一種命名約定,但您可以將任何類註冊爲Spring bean。我會用這些信息更新答案 –