玩!框架使用<lot>的静态

哇,戏剧!框架有很多静态方法。在我上学的地方,我们被告知永远不要使用任何静态,但要玩!就像没有明天一样使用它。这在某种程度上可以吗?如果是,为什么?

我们(7人和我)计划使用Play!涉及 Web 应用的项目的框架。我们决定用Play来做这件事!因为它看起来很有趣,我们所有人都已经知道Java并且任务非常困难,所以我们想专注于实际的任务,而不是学习如何用其他语言编程。

然而,我们总是被告知,永远不要在我们开发的任何Java程序中使用“静态”,但是当我看到Play时!...井。。。大约一半的方法是静态的。</夸张>

我想,至少,我们可以使用单例对象(通过使用Scala,例如^^)来编程我们的项目,但我非常担心框架本身实际上有多少静态。

那么,我应该担心这一点吗?按照游戏的方式!开发人员对它进行了编程,以便所有这些静态不会造成问题?

(例如,这个线程对为什么应该不惜一切代价避免静态成员的咆哮。


答案 1

Play 仅在有意义时才使用静态方法:

  • 在控制器层中,因为控制器不是面向对象的。控制器充当 HTTP 世界(即无状态和基于请求/响应)和完全面向对象的模型层之间的映射器。
  • 在工厂方法的模型层中,如findAll(),count(),create(),当然不依赖于任何特定的实例
  • 在一些提供纯效用函数的 play.libs.* 类中

答案 2

Play框架并不能很好地证明何时使用静力学是合适的,也不能证明你的老师是错的。游戏是一种作弊,解决了Java语言之外的静态问题。

关键问题是你必须并行处理多个HTTP请求,而静态字段是“全局”的。因此,对于某些事情,每个线程需要一个实例(或者更好的是,每个HTTP请求一个实例),但其中一些内容是由Play中的静态方法返回的。这有效,因为玩!大量使用 -s,因此它解决了 Java 语言之外的静态问题。但这还不是全部。有人说控制器方法是理所当然的静态的。当然,但是在普通的Java中,这将是不方便的,因为这样你就不能在没有某种前缀的情况下访问特定于请求的数据,比如 in ,然后你仍然必须从某个地方获取,比如作为静态控制器方法的参数,这更加麻烦。然而,在Play中,你可以直接写和喜欢,它们只是静态字段。这是因为 Play 使用字节码检测将所有这些静态字段引用更改为更智能的内容。同样,这是Java语言之外的解决方案。这些不是最后的静态字段。ThreadLocalreq.req.sessionreqsession

因此,一般来说,避免非最终静态。不过,玩耍对你来说是神奇的,所以在这种情况下不要害怕他们。


推荐