将Lift与Play2进行比较

Mai*_*ein 47 scala web-frameworks lift playframework-2.0

我之前使用过play2和java.它感觉有点像样板文件,特别是如果你使用带有java的akka​​.但这不是框架的错.

昨天我读了"Scala for the greatient",我真的很喜欢这种语言.

现在我查看了两个框架Lift 2.5和Play 2.0.3.我认为电梯有更高的学习曲线,我不能只用电梯做一些事情.这不适合我.从我看到的,Lift有一个非常漂亮和干净的设计.

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

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

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

  • 无国籍/有状态:很难说主要区别在哪里.我只知道如果你使用网络套接字,播放也有一个状态.

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

  • 两个框架都在使用sbt

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

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

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

  • 通过CSRF支持提升船舶.Play2有一个CSRF模块,但这为你的代码增加了一个样板.

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



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

Dav*_*lak 76

在使用Lift一两个星期之后发布此消息并不能真正满足任何人的利益.但是,我想花点时间纠正一些错误和错误观念.

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

你错了.安全性是框架的工作.默认情况下完成安全性至关重要,而不是依靠每个开发人员来理解每个安全漏洞,并确保每行代码都考虑到这一点.

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

Lift在顶部提供了一个可靠的安全层,因此默认情况下,没有XSS,CSRF等,但开发人员可以深入挖掘他想要的HTTP请求并处理线路上的字节.

  • 无国籍/有状态:很难说主要区别在哪里.我只知道如果你使用网络套接字,播放也有一个状态.

电梯非常清楚你需要什么状态和你不需要的地方.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的任何内容.

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

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

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

  • 通过CSRF支持提升船舶.Play2有一个CSRF模块,但这为你的代码增加了一个样板.

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

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

提升应用程序可以是您想要的有状态或无状态.这是您的选择,Lift非常清楚如何做出决定.

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

分手记

Play很像Rails:很快就会把网站打成一团,而且它基于MVC,所以很多开发人员都理解它.但Play缺乏Rails(社区,插件,专业知识,才能等)的深度和广度.如果你想要快速,简单的MVC,那么请使用Rails和JRuby并在Scala中编写你的后端(他们的工作非常好.)

电梯是一种不同的野兽.有一个重要的学习曲线(停止思考MVC并开始考虑用户体验首先流向业务逻辑.)但是,一旦你达到了学习曲线,Lift网站就更安全,高度可扩展,超级互动,更容易保持一段时间.

  • 不,Typesafe采用了Play,因为我认为最好不要使用Typesafe并拒绝他们加入联盟的提议.玩是他们唯一真正的选择,而且它是一个弱者. (38认同)
  • @RobinGreen不要散布谎言.我从来没有"离开"电梯社区.是的,我有其他项目和不同语言的工作.我所做的就是不再是维尔的仁慈独裁者.电梯已经超越了一个人,事实上2.5-M4发布是在没有我的情况下完成的,这是一种力量,而不是弱点.Lift社区里有很多大脑......我只是众多制造Lift的人之一.但我积极编码Lift并积极参与Lift社区. (18认同)
  • 升力确实是一种不同的野兽,这可能就是为什么TypeSafe ......采用了Play,而Slick而不是Mapper等等.像Rails这样的游戏是一个开放的大门,每个人都"得到"它,而且与Rails不同,Play非常快速,可扩展,直观且非常棒.Pidgin打孔玩简单的MVC(暗示不是复杂的)观点,用Rails/JRuby/Scala拼凑起来 - 是纯粹的'FUD (14认同)
  • 大卫罗宾曾多次说过他并没有"离开"电梯.他仍然在谷歌小组中提交代码和回答.实际上,这样一个巨大的大脑从事多个项目/多种语言只是一个加分.每个项目都只能从中受益 - 因为David总是能够比较/添加不同社区/项目中的东西/黑客和经验. (8认同)
  • @DavidPollak,我为不准确地描述发生的事情而道歉,并且在写评论之前不回去检查我的理解.我曾经认为,因为你已经创建了这个新项目Visio,你将把大部分时间用于它,因此从那时起你对Lift的参与就会很少.显然,情况并非如此. (8认同)
  • 谢谢这是一个非常好的阅读,它清除了一些虚假信息. (3认同)
  • 为什么不与他们合作更好?,你有关于它的帖子或什么? (2认同)

Jac*_*ack 20

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

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

有关使用Mongo with Play的示例,请查看Factile.

总而言之,我认为升降或游戏都不会出错.两者都是活跃的项目,拥有良好的社区和作者的良好支持.这真的取决于您的业务问题.如果工具支持对您很重要,那么您可能希望使用Play(它在IntelliJ Idea上得到很好的支持).

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

对于我目前的项目,我使用lift-mapper进行ORM(非常棒且坚如磐石),使用Spray for REST(这简直太棒了).这种方法完全避免了框架,但这取决于你想要做什么.框架通常是要走的路.