MVC框架和静态方法

时间:2014-02-28 11:59:07

标签: grails groovy

我正在研究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()

我应该删除静态和创建实例吗?什么是最好的方法?

1 个答案:

答案 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