47

我之前在 java 中使用过 play2。感觉有点像样板文件,特别是如果您将 akka 与 java 一起使用。但这不是框架的错。

昨天我读了“为不耐烦的人准备的 Scala”,我真的很喜欢这种语言。

现在我查看了 Lift 2.5 和 Play 2.0.3 这两个框架。我认为电梯的学习曲线更高,我不能只用电梯做一些事情。这对我来说不是一个骗局。据我所见,Lift 的设计非常漂亮和干净。

但对我来说,很难说出主要的区别是什么。我认为这两个框架都很棒。

  • Views First 方法不允许您在模板中编写代码,而是必须在片段中编写代码。我非常喜欢这个,因为它对我来说看起来更有条理。它还允许您使用普通的 html 编辑器。 (我没有太多经验,这只是我的第一印象)

  • 为了安全,我认为这不是框架的工作。

  • 无状态/有状态:很难说出主要区别在哪里。我只知道如果你使用 web sockets,play 也有一个状态。

  • 按 F5 后,这两个框架都可以编译。我非常喜欢这个功能。

  • 两个框架都在使用 sbt

  • Lift 带有授权,但我认为有一个 play2 scala 插件可以做同样的事情

  • Lift 有一个用于 mongoDB 的 ORM 映射器。因为我想使用 noSQL,所以这对我来说看起来更干净。(再次没有太多经验) 编辑play2 中有一个用于 scala mongodb 的 ORM 映射器https://github.com/leon/play-salat

  • 异步 - Play 2 使用 Akka。不知道电梯使用什么,但他们也有类似的东西。

  • Lift 附带 CSRF 支持。Play2 有一个用于 CSRF 的模块,但这会为您的代码添加一个样板。

  • 无状态身份验证似乎存在一些安全漏洞。两个框架都具有状态身份验证。(play2 有状态/无状态,提升有状态)



  • 每个框架的优势是什么?
4

2 回答 2

77

在使用 Lift 一两个星期后发布此内容并不符合任何人的利益。但是,我想花一些时间来纠正一些错误和误解。

  • 为了安全,我认为这不是框架的工作。

你大错特错了。安全是框架的工作。至关重要的是,安全是默认完成的,而不是依赖每个开发人员了解每个安全漏洞并确保每一行代码都考虑到这一点。

我们所要做的就是看看GitHub发生了什么, 以了解即使是使用众所周知的技术的最佳编码人员也可能犯下严重错误。

Lift 在顶部提供了一个坚实的安全层,因此默认情况下,没有 XSS、CSRF 等,但开发人员可以尽可能深入地挖掘 HTTP 请求并处理网络上的字节。

  • 无状态/有状态:很难说出主要区别在哪里。我只知道如果你使用 web sockets,play 也有一个状态。

Lift 非常清楚哪里需要状态,哪里不需要。Lift 可以支持无状态、部分有状态和完全有状态的应用程序。在逐页和逐个请求的基础上,Lift 应用程序可以是有状态的或无状态的(例如,在Foursquare中,场所页面对于搜索引擎抓取是无状态的,但对于已登录的浏览器是有状态的。)有关状态设计决策的更多信息,请参阅Lift、State 和 Scaling

  • 两个框架都在使用 sbt

Lift 使用 Maven、sbt、Buildr 甚至 Ant。Lift 不知道构建环境和部署环境(Java EE 容器、Netty 等)。这很重要,因为它使 Lift 更容易与您环境的其他部分集成。

  • Lift 带有授权,但我认为有一个 play2 scala 插件可以做同样的事情

Lift 已经存在了 5 年多,并且有很多模块和东西。Lift Web 框架(与模块不同)与持久性、身份验证等无关,因此您可以在 Lift 中使用任何东西。

  • 异步 - Play 2 使用 Akka。不知道电梯使用什么,但他们也有类似的东西。

Lift 已经支持 Async 超过 5 年了。它已融入框架。Lift 的 Comet 支持是所有 Web 框架中最好的,因为除其他外,它通过对服务器的单个请求来多路复用页面上的所有“推送”请求,从而避免连接不足。Lift 如何进行异步并不重要,因为 Lift 的核心理念之一是我们从开发人员那里移除管道,以便开发人员可以专注于业务逻辑。

但是对于那些关心的人来说,Lift 拥有 Scala 领域中任何框架中最好和最轻量级的演员。我们是第一个脱离 Scala Actor 库的人,并努力为不同的 Actor 库开辟道路,让 Akka 和 ScalaZ Actors 蓬勃发展。

  • Lift 附带 CSRF 支持。Play2 有一个用于 CSRF 的模块,但这会为您的代码添加一个样板。

这是 Lift 对安全性承诺的一部分。这很重要

  • 无状态身份验证似乎存在一些安全漏洞。两个框架都具有状态身份验证。(play2 有状态/无状态,提升有状态)

Lift 应用程序可以是有状态的,也可以是无状态的。这是您的选择,Lift 非常清楚如何做出决定。

此外,正如我在 Lift、State 和 Scaling 文章中指出的那样,让开发人员弄清楚如何以一种安全、可扩展、高性能的方式序列化状态(因为识别特定用户的 Web 应用程序上的几乎每个请求都是有状态的)应该由框架以可预测、安全的方式完成,并为开发人员提供合理的覆盖。

离别笔记

Play 很像 Rails:它可以快速将一个站点拼凑在一起,而且它基于 MVC,因此很多开发人员都理解它。但是 Play 缺乏 Rails 的深度和广度(社区、插件、专业知识、人才等)。如果你想要快速、简单的 MVC,那么使用 Rails 和 JRuby 并用 Scala 编写后端(它们一起工作得非常好。)

电梯是另一种野兽。有一个显着的学习曲线(停止思考 MVC 并开始考虑首先考虑流向业务逻辑的用户体验。)但是一旦你走上学习曲线,Lift 站点就会更安全、高度可扩展、超级交互,并且更容易随着时间的推移保持。

于 2012-09-14T16:16:35.460 回答
20

要了解 Play 可以做什么(它可能很酷),请查看TypeSafe 控制台

要快速使用 Lift,请使用模板项目

有关在 Play 中使用 Mongo 的示例,请查看Factile

总之,我认为 Lift 或 Play 都不会出错。两者都是活跃的项目,拥有良好的社区和作者的良好支持。这实际上取决于您的业务问题。如果工具支持对您很重要,那么您可能需要考虑使用 Play(它在 IntelliJ Idea 上得到了很好的支持)。

请注意,作为 TypeSafe 技术堆栈的一部分,Play 将构建到最新版本的 Scala,因此如果使用 Scala 2.10 功能对您很重要,那么您可能需要牢记这一点。Lift 目前使用的是 Scala 2.9.2,这也很好。

对于我目前的项目,我使用用于 ORM 的提升映射器(它非常棒且坚如磐石),用于 REST 的喷雾器(这简直太棒了)。这种方法完全避免了框架,但这取决于您想要做什么。框架通常是要走的路。

于 2012-09-14T13:04:58.560 回答