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

Waaah,玩! 框架有很多静态方法。 我在哪里上学,我们被告知永远不会使用任何静力学,但玩! 像没有明天一样使用它。 那好吗? 如果是这样,为什么?

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

然而,我们总是被告知,在我们开发的任何Java程序中都不会使用'static',但是当我看着Play! ...呃...大概有一半的方法是静态的。 </夸张>

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

那么,我应该关心这个吗? 玩的方式! 开发人员对它进行了编程,使所有这些静态不会造成问题?

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


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

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

  • 播放框架并不能很好地证明什么时候使用静态图像是合适的,也不能证明你的老师是错误的。 游戏有点作弊,解决了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()的静态方法上,我猜你的应用程序类是有意义的。

    链接地址: http://www.djcxy.com/p/76123.html

    上一篇: Play! framework uses a <lot> of statics

    下一篇: When it's applicable to use CopyOnWriteArrayList