我正在用Java开发一个Play Framework 2应用程序,我想知道我是否可以使用静态助手类。
例如,我想知道用户是否已登录并已完成其配置文件。这个测试需要几行,可能会有所变化,并且在应用程序中使用了很多。
所以我在一个方法中编写了一个带有这些测试的类,其中包含一个我在任何地方使用的参数(Session对象)。
但是每次我必须实例化一个类才能使用该方法,因此在规模上它可能效率低下。使它静止是否安全?如果是,我可以安全地使用哪个其他游戏对象作为参数?
答案 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( )界面中出现了合同。
好处?谁知道。如果我在家里完全写一些东西,或者控制器代码实际上与帮助器紧密耦合,我会选择第一个。如果我和公司的其他人一起工作,我会选择第二个。这完全取决于软件工程,但事情就是这样。