53

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

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

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

还有什么 ?阿卡?

4

6 回答 6

44

这是我的清单,当然,有一些重复

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

  • 在 scala 与 java 中编程的核心(必须学习 scala 以进行协作)

  • 用于模板的 scala(但正在将 groovy 模板作为一个模块进行工作,以简化迁移),因此您必须指定每个参数的类型

  • sbt 控制台而不是 python 脚本

  • sbt 用于解决依赖项而不是内置解决方案(播放依赖项命令)

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

  • 对于java,它支持ebean代替hibernate(但你可以使用hibernate)

  • 对于 scala,带有异常(但你可以使用其他库)

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

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

  • 更好的性能

  • 类型安全支持,它是类型安全堆栈的一部分

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

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

  • 不同的控制器 API(更详细,恕我直言)您可以将简单的 play 1.x crud 控制器类似的 play 2.0控制器进行比较

  • scala 是一等公民,但同样支持 java(每个都有本机 API)

  • 热重新编译速度较慢(它仍处于测试阶段,希望他们能解决它)

  • scala IDE 支持不如 java 成熟(但它发展得很好)

  • 委托给 akka 的异步支持

  • 更好地为不同类型的数据源做好准备,如 nosql dbs

有关更多信息,请查看play 2.0 页面(此处提供西班牙语翻译)和RC1 文档

无论如何,我认为主要区别在于 play 1.x 尝试构建自己的堆栈,同时逃离 j2ee,现在它们是基于 scala、akka、sbt 并在公司支持下的新替代堆栈的一部分像类型安全...

于 2011-12-27T04:28:31.060 回答
18

我觉得以下几点很重要。有些是专业人士,有些是反对者。你必须自己看看你喜欢什么版本。

  • 核心是用 Scala 编写的,因此如果您不是 Scala 开发人员,您无法自己轻松修复错误。这是游戏 1.2 的优势。此外,如果文档不是很好,您就会迷失方向。在 play 1.2 中,您可以简单地查看代码。使用 Eclipse,您有一个 IDE 可以轻松搜索参考。我不确定它是否存在与 Scala 相当的 IDE。我听说 eclipse an 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 提到的小细节。

于 2011-11-19T10:18:23.550 回答
13

你的清单是一个很好的开始。我的清单看起来很相似,还有一些额外的东西。

  • 模板已从 Groovy 迁移到 Scala。
  • Scala 成为一等公民,而不是可选插件
  • 更加关注类型安全,尤其是在模板中
  • Python 到 SBT
  • 休眠到 Ebean
  • Akka 用于补充 Play 1.x 中的异步功能,而不是将 Akka 作为模块
  • Anorm 在核心中可用(而不是 scala 插件)
  • 由于更少的动态元素和更多的编译,生产中的性能改进
  • 集成到 TypeSafe 堆栈中

正如您所料,我们的列表之间存在重复。还需要注意的是,此列表截至 2011 年 11 月,而 play 2 仍处于测试阶段。

于 2011-11-18T23:10:58.443 回答
10

这里有一些非常好的答案,我只是想添加一些小点并提​​供随着时间变得更加清晰的细节。

浏览器内报告:播放 2 报告 Javascript(使用 google 的闭包编译器)和浏览器中的 CSS 文件中的错误,而不仅仅是 Java/Scala 文件。这真的很酷。

部署为 WAR: Play 2仍不正式支持部署或导出为 WAR。存在一个应该提供此类支持的插件,但仍处于测试阶段,存在一些已知问题如果没有 Servlets 3.1 容器,完全支持 Play 2 的所有功能是不可能的,这至少需要半年时间,可能更久。

插件:目前play 1还有很多,如果你依赖一些插件,确保play 2也存在。

IDE 支持: IntelliJ 12 应该内置对 play 2 的支持。你已经可以获得 EAP(我用完了允许的超链接,所以你必须用谷歌搜索)。

主观意见:我觉得 Play 2 似乎牺牲了一些简单性来支持更高级的功能和更完整的类型安全。我并不是说 Play 2 难或不直观,只是不如 Play 1。

Play 1 是 Web 开发人员为 Web 开发人员提供的 Web 框架。Play 2 是 Web 开发人员为 Web 开发人员提供的具有前瞻性的 Web 框架。

可以这么说,重点略有转移,易用性不再是主要目标,而是两个主要目标之一。这当然只是我个人的看法,我知道的很少。

于 2012-08-10T16:17:22.063 回答
6

您可以在以下博客文章中找到关于该主题的另一种看法:http: //blog.awfbeat.com/post/22314115684/impressions-of-play-framework-1-2-4-vs-2-0

于 2012-05-03T11:11:26.193 回答
2

从这篇文章中总结:

  • 直接使用 Google Closure Compiler、CoffeScript 和 LESS 的资产管道
  • 一切都已编译,甚至是路由文件
  • 正在运行的应用程序的低内存占用
  • 使用 Iteratee/Enumerator 进行异步/反应式编程
  • 正如你提到的,Scala、Akka、......
于 2011-11-19T16:30:51.227 回答