玩! 框架使用一个<lot>的静态
Waaah,玩! 框架有很多静态方法。 我在哪里上学,我们被告知永远不会使用任何静力学,但玩! 像没有明天一样使用它。 那好吗? 如果是这样,为什么?
我们(7人和我)计划使用Play! 涉及Web应用程序的项目框架。 我们决定用Play来完成! 因为它看起来相当有趣,我们所有人都已经知道Java并且任务非常艰难,所以我们想要专注于实际的任务,而不是学习如何用不同的语言编程。
然而,我们总是被告知,在我们开发的任何Java程序中都不会使用'static',但是当我看着Play! ...呃...大概有一半的方法是静态的。 </夸张>
我想,至少我们可以使用单例对象(通过使用Scala,例如^^)来编程我们的项目,但是我非常关心框架本身实际存在多少静态。
那么,我应该关心这个吗? 玩的方式! 开发人员对它进行了编程,使所有这些静态不会造成问题?
(例如,这个线程咆哮着为什么应该不惜一切代价避免静态成员。)
Play只有在有意义时才使用静态方法:
播放框架并不能很好地证明什么时候使用静态图像是合适的,也不能证明你的老师是错误的。 游戏有点作弊,解决了Java语言之外的静态问题。
关键问题是你必须并行处理多个HTTP请求,而静态字段是“全局”的。 因此,对于某些事情,每个线程需要一个实例(或者更好,每个HTTP请求有一个实例),但其中一些内容由Play中的静态方法返回。 这是因为Play! 大量使用ThreadLocal
-s,因此它解决了Java语言之外的静态问题。 但那不是一切。 有人说控制器方法是合理的静态的。 当然,但是在普通的Java中,这会很不方便,因为那样你就不能访问没有某种前缀的请求特定数据,比如req.
在req.session
,然后你仍然需要从某个地方获得req
,比如作为静态控制器方法的一个参数,这更加麻烦。 然而,在Play中,你可以直接写session
和喜欢,它们只是静态字段。 这是因为Play使用字节码工具来将所有这些静态字段引用更改为更智能的内容。 再次,Java语言之外的解决方案。 这些不是最后的静态字段。
所以,一般来说,避免非最终静态。 尽管游戏对你有帮助,所以在这种情况下不要害怕他们。
从一个非常简短的角度来看,我认为它是有道理的:Web请求是无状态的,所以没有对象接收请求(=方法)。 因此,将URI(例如“/ articles / archive?date = 08/01/08&page = 2”)映射到名为archive()
的静态方法上,我猜你的应用程序类是有意义的。