我知道这个问题有点悬而未决,但我一直在考虑将Scala/Lift作为Java/Spring的替代方案,我想知道Scala/Lift相对于它有什么真正的优势.根据我的观点和经验,Java批注和Spring确实最大限度地减少了您必须为应用程序编写的代码量.Scala/Lift对此有改进吗?
我知道这个问题有点悬而未决,但我一直在考虑将Scala/Lift作为Java/Spring的替代方案,我想知道Scala/Lift相对于它有什么真正的优势.根据我的观点和经验,Java批注和Spring确实最大限度地减少了您必须为应用程序编写的代码量.Scala/Lift对此有改进吗?
Let's assume we're equally comfortable in Scala and Java, and ignore the (huge) language differences except as they pertain to Spring or Lift.个
Spring和Lift在成熟度和目标上几乎截然相反.
总而言之,弹簧是重量级的,电梯是轻量级的.如果有足够的决心和资源,你可以颠覆这一点,但你需要两者兼得lot分.
在使用了这两种框架之后,以下是我脑海中根深蒂固的具体差异.这不是一份详尽的 list ,我无论如何也无法编译.我觉得最有趣的就是...
观哲学
Lift鼓励在代码段/操作方法中放置一些视图material .特别是代码片段,将会散布以编程方式生成的表单元素、<div>
、<p>
等.
这是强大而有用的,特别是因为Scala有一个内置的语言级XML模式.可以在Scala方法中内联编写XML,包括大括号中的变量绑定.这对于非常简单的XML服务或服务模型可能是令人愉快的--您可以在一个非常简洁的文件中生成一套HTTP响应操作,而不需要模板或很多附带的配置.缺点是复杂性.根据您走得多远,视图和逻辑之间的关注点要么模糊分离,要么不分离.
相反,在webapp中经常使用Spring会将视图和其他所有东西严格分开.我认为Spring支持几个模板引擎,但我只在严肃的场合使用过JSP.用JSP进行受Lift启发的"模糊MVC"设计将是疯狂的.这在大型项目中是件好事,因为在这些项目中,仅仅阅读和理解的时间可能是压倒性的.
对象关系映射器 Select
Lift的内置ORM是"Mapper".有一个即将到来的替代方案叫做"记录",但我认为它仍然被认为是阿尔法之前的.LiftWeb的书中有关于使用Mapper和JPA的章节.
Lift的CRUDify功能虽然很酷,但只适用于Mapper(而不是JPA).
当然,Spring支持panoply of standard and/or mature database technologies.这里的关键词是"支持".从理论上讲,您可以将任何Java ORM与Lift结合使用,因为您可以从Scala调用任意Java代码.但Lift只支持Mapper和(在较小程度上)JPA.此外,在Scala中使用非平凡的Java代码目前并不像人们希望的那样无缝;使用Java ORM,您可能会发现自己在任何地方都使用Java和Scala集合,或者在Java组件内外转换所有集合.
配置
Lift应用程序几乎完全是通过应用程序范围内的"Boot"类来配置的.换句话说,配置是通过Scala代码完成的.这非常适合具有简单配置的项目,并且当进行配置的人员可以轻松编辑Scala时.
Spring在配置方面非常灵活.许多配置选项可以通过XML配置或注释来驱动.
文档
Lift的文档还很年轻.春天的doctor 已经相当成熟了.这不是比赛.
因为Spring的文档已经组织得很好并且很容易找到,所以我将判断我为Lift找到的文档.Lift文档基本上有4个来源:LiftWeb Book、API Docs、LiftWeb Google group和"Getting Started".还有一套不错的代码示例,但我不认为它们本身就是"文档".
API文档不完整.LiftWeb图书已经在树上出版了,但它也可以在网上免费获得.它真的很有用,尽管它明确的说教风格有时会激怒我.辅导课长了点,合同短了点.弹簧有适当的手册,这是升降机所缺乏的.
但Lift确实有一系列很好的例子.如果你阅读Lift代码和示例代码(而且你已经很了解Scala),你可以在很短的时间内解决问题.
这两个框架都很有说服力.有各种各样的应用程序,你可以从中 Select 一个,做得很好.