我正在研究Grails项目,我正在尝试重构它,从类中提取代码并将其放在Helper Classes中。我现在遇到的问题是我最终得到了一堆助手(这不是一个真正的问题),但主要问题是我拥有的静态方法的数量。这是一个例子:
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
此外,您可以将任何类注册为Spring bean,并使用类似于Service的方法。见http://grails.org/doc/latest/guide/spring.html