在Play Framework 2中使用静态助手类是一个好主意吗?

时间:2014-10-19 18:34:24

标签: java playframework thread-safety

我正在用Java开发一个Play Framework 2应用程序,我想知道我是否可以使用静态助手类。

例如,我想知道用户是否已登录并已完成其配置文件。这个测试需要几行,可能会有所变化,并且在应用程序中使用了很多。

所以我在一个方法中编写了一个带有这些测试的类,其中包含一个我在任何地方使用的参数(Session对象)。

但是每次我必须实例化一个类才能使用该方法,因此在规模上它可能效率低下。使它静止是否安全?如果是,我可以安全地使用哪个其他游戏对象作为参数?

1 个答案:

答案 0 :(得分:0)

当你说" test"时,我认为你的意思是一些检查逻辑而不是单元测试。

在这种情况下,您可以使用依赖注入而不是静态助手。

https://www.playframework.com/documentation/2.3.x/JavaInjection

以上链接显示了在处理请求时如何使用Guice注入控制器的示例。

所以以前你的控制器是:

public class Application extends Controller {

    public static Result index() {
        if (YourStaticHelper.yourStaticMethod.isOk()) {
            return ok("It works!");
        }
        else {
            return forbidden("NO");
        }
    }

}

现在它会变成:

public class Application extends Controller {

    @Inject
    YourStaticHelperInterface checker;

    public Result index() {  // no longer static
        if (checker.isOk()) {
            return ok("It works!");
        }
        else {
            return forbidden("NO");
        }
    }

}

如果你不知何故需要一个新的帮助器,你需要更改控制器代码以使其适应变化,而在第二个你需要在运行时注入一个不同的实现,如isOk( )界面中出现了合同。

好处?谁知道。如果我在家里完全写一些东西,或者控制器代码实际上与帮助器紧密耦合,我会选择第一个。如果我和公司的其他人一起工作,我会选择第二个。这完全取决于软件工程,但事情就是这样。