Play Framework 1.0和2.0之间的主要区别是什么?

53

最近发布了Play Framework 2.0,我想知道有没有人可以从高层次的角度总结出Play Framework 1和2之间的主要区别。

我已经编译了一些(play 1.0 -> play 2.0):

  • 模板引擎: Groovy Pages -> Scala Templates
  • 持久化: Hibernate -> Ebean
  • 语言支持: Java -> Scala,Java
  • 动态编译: 字节码注入 -> 通过SBT进行动态编译
  • 构建系统: n/a -> SBT
  • 可扩展性: 模块、插件 -> 子项目、插件、SBT插件

还有什么? Akka吗?


3
资产管道直接使用CoffeeScript和LESS。 - Marius Soutier
3
一个非常重要的变化:成为TypeSafe官方Scala平台的一部分。这将使得公司采用更加“安全”(得到支持,有些人对此很疑虑),并且促进其相对于其他Scala框架(如Lift)的采用。 - Pere Villega
好的,我会在几周后选择一个获胜者。你们都提供了有效的观点。 - Olivier Refalo
2
我只想提一下,我们中有很多人怀念Play 1。当然,它仍然存在,但不再进行积极开发。它是一个简单、有见解和非常有效的Java Web开发框架。Play 2并不简单,也没有那么强烈的见解,而且Java是一个二等公民。我曾经向其他开发者推荐Play 1,但我不再推荐Play 2了。 - pents90
6个回答

44

这是我的列表,当然有一些重复

  • 破坏了向后兼容性(从头开始重写)

  • 核心程序用scala而不是java编写(必须学习scala才能协作)

  • 模板使用scala(但正在开发groovy模板作为模块,以便于迁移),因此必须指定每个参数的类型

  • sbt控制台代替python脚本

  • sbt解决依赖项而不是内置解决方案(play dependencies命令)

  • 模块可用性,显然需要一些时间来迁移所有模块...

  • 对于Java,它更喜欢ebean而不是hibernate(但您将能够使用hibernate)

  • 对于Scala,附带anorm(但您将能够使用其他库)

  • 更模块化,更容易选择其他组件

  • 更多的类型安全性-视图甚至路由在编译时进行检查

  • 性能更好

  • typesafe支持,它是typesafe stack的一部分

  • 少一些魔法,没有那么多字节码生成和类似的东西

  • 更标准化,(play项目只是标准sbt项目)

  • 不同的控制器API(更冗长,个人认为),您可以将simple play 1.x crud controllersimilar play 2.0 one进行比较

  • Scala是一等公民,但Java同样受到支持(每个语言都有本机API)

  • 热重新编译速度较慢(仍处于beta版,希望他们能解决问题)

  • Scala IDE支持不如Java成熟(但正在良好发展)

  • 异步支持委托给akka

  • 更好地准备了不同类型的数据源,例如nosql数据库

了解更多信息,请查看play 2.0页面(西班牙语翻译可在此处找到)和RC1文档

无论如何,我认为主要区别在于play 1.x试图构建自己的堆栈,同时远离j2ee,现在他们是一个基于scala、akka、sbt的新型替代堆栈,并得到了typesafe这样一家公司的支持...


所有的答案都很相关,但是这个似乎是迄今为止最完整的。谢谢。 - Olivier Refalo
编辑了答案,在2012年7月,它已经足够稳定,可以被视为“生产就绪”。 - i.am.michiel

18

我认为以下几点很重要,一些是优点,一些是缺点。您必须自己看清楚您喜欢哪个版本。

  • 核心代码是用Scala编写的,如果您不是Scala开发人员,您无法轻松地自行修复错误。这是Play 1.2的一个优点。此外,如果文档不太好,您就会迷失方向。在Play 1.2中,您只需查看代码即可解决问题,使用Eclipse可以轻松搜索参考文献。 我不确定是否有可比较的Scala IDE。我听说Eclipse和IntelliJ与它一起工作得很好,但我没有亲身经历。

  • 组件在2.0中更松散耦合。在Play 2.0中,您可以轻松选择首选的模板引擎或持久性层。在1.2中,除了JPA外,更难选择其他东西。

  • Scala现在是一等公民,因此您可以自由选择在Scala或Java中编写应用程序。

  • 对其他框架的依赖性更高。例如,他们现在需要Scala和Akka。两者都很好,但很复杂。因此,如果这些框架中存在错误,您可能会遇到大问题。在Play 1.2中,我只看到Hibernate存在此类风险。

  • "一切"现在都是类型安全的,并且可以由编译器检查。

  • 将Python更改为SBT意味着您需要更多的开发机器内存。我的意思是,Scala编译器需要至少512 MB RAM。这可能是持续构建服务器上的一个问题。

当然,还有很多Codemwnci提到的小细节。


非常好的补充,只有一个细节,Scala 不是一个框架,如果其中存在错误,那么你真的会遇到问题... - opensas

13

您的列表是一个非常好的起点。我的列表看起来类似,但有一些额外的内容。

  • 模板从Groovy迁移到Scala。
  • Scala成为一流公民,而不再是可选插件
  • 更加注重类型安全,特别是在模板中
  • 从Python转向SBT
  • 从Hibernate转向Ebean
  • Akka用于补充Play 1.x中的异步功能,而不是作为模块
  • Anorm可用于核心(而不是scala插件)
  • 由于较少的动态元素和更多的编译,生产中的性能得到了提高
  • 集成到TypeSafe堆栈中

正如您所预期的那样,我们的列表之间存在重复。还要注意,这个列表截止到2011年11月份,而Play 2仍处于Beta测试阶段。


3
是的,我只知道这一点是因为我不得不从本地Ivy存储库中删除一些JAR文件才使SBT正常工作。 - Marius Soutier

10

这里有一些非常好的回答,我只想添加一些小细节以及随着时间推移变得更加清晰的细节。

在浏览器中报告:Play 2不仅可以报告Java/Scala文件中的错误,还可以在浏览器中报告Javascript(使用Google的闭包编译器)和CSS文件中的错误,这真的很棒。

作为WAR部署:Play 2目前还没有官方支持将应用程序打包成WAR进行部署或导出。虽然存在一个插件,据说可以提供这种支持,但是该插件仍然处于测试阶段并存在一些已知问题。完全支持所有Play 2功能实际上不可能在没有Servlets 3.1容器的情况下实现,这需要至少半年的时间,可能更长。

插件:目前,Play 1的插件要比Play 2的多得多,如果您依赖某个插件,请确保它也适用于Play 2。

IDE支持:IntelliJ 12应该内置支持Play 2。您已经可以获取EAP版本(我用完了允许的超链接,所以您需要自行搜索)。

主观看法:我感觉Play 2为支持更高级功能和更完整的类型安全性而牺牲了一些简单性。我并不是说Play 2很难或者不直观,只是比Play 1稍微复杂一些。

Play 1是面向Web开发人员的Web框架。 Play 2是面向Web开发人员的前瞻性Web框架。

换句话说,重点有所转移,易用性不再是主要目标之一,而是两个主要目标之一。当然,这只是我的看法,我了解得很少。


1
这当然只是我的个人观点,我对此知之甚少。但你的帖子包含了以前不太明显的信息。点赞! - sjas

6

良好的比较,谢谢。我个人转向了Node/Coffeescript。我失去了JVM和类型,但是这东西编码起来真的很有趣。 - Olivier Refalo

2

这篇文章总结:

  • 资产管道可直接使用Google Closure Compiler、CoffeScript和LESS
  • 所有内容都被编译,包括路由文件
  • 运行应用程序的内存占用很低
  • 使用Iteratee/Enumerator进行异步/反应性编程
  • 正如您提到的,Scala、Akka等

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接