为什么我会使用Scala / Lift而不是Java / Spring?

时间:2010-04-21 14:40:14

标签: java spring scala lift

我知道这个问题有点开放,但我一直在考虑使用Scala / Lift作为Java / Spring的替代品,我想知道Scala / Lift对它有什么真正的优势。从我的观点和经验来看,Java Annotations和Spring确实最大限度地减少了您为应用程序所做的编码量。 Scala / Lift会改进吗?

10 个答案:

答案 0 :(得分:229)

答案 1 :(得分:113)

让我们假设我们在Scala和Java中同样适应,并忽略(巨大的)语言差异,除非它们属于Spring或Lift。

Spring and Lift在成熟度和目标方面几乎截然相反。

  • 春天比电梯大约五岁
  • 升力是整体的,只针对网络; Spring是模块化的,针对网络和“常规”应用程序
  • Spring支持大量Java EE功能;电梯忽略那些东西

在一句话中,Spring是重量级的,而Lift是轻量级的。有足够的决心和资源,你可以把它转过来,但你需要一个很多

以下是在使用这两个框架后陷入困境的具体差异。这不是一个详尽的列表,无论如何我都无法编译。对我来说最有趣的是......

  1. 查看理念

    Lift鼓励将一些视图材料放入片段/操作方法中。片段代码尤其会使用以编程方式生成的表单元素<div> s,<p>等。

    这非常强大且有用,特别是因为Scala具有内置语言级XML模式。可以在Scala方法中内联编写XML,包括大括号中的变量绑定。对于非常简单的XML服务或服务模型,这可能是令人愉快的 - 您可以在一个精彩简洁的文件中敲出一套HTTP响应操作,无需模板或许多附带配置。缺点是复杂性。根据你走了多远,在视图和逻辑之间存在模糊的关注分离,或者没有分离。

    相比之下,定期使用Spring进行webapps会强制实现视图与其他所有内容之间的强烈分离。我认为Spring支持几种模板引擎,但我只使用JSP来处理任何严重问题。用JSP做一个以Lift为灵感的“模糊MVC”设计将是疯狂的。这对于大型项目来说是件好事,在这些项目中,阅读和理解的时间可能会非常大。

  2. 对象关系映射器选择

    Lift的内置ORM是“Mapper”。有一个名为“Record”的即将推出的替代品,但我认为它仍然被认为是pre-alpha。 LiftWeb Book中有关于使用Mapper和JPA的部分。

    提升的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组件和从Java组件转换出来。

  3. 配置

    Lift应用程序几乎完全通过应用程序范围的“Boot”类的方法进行配置。换句话说,配置是通过Scala代码完成的。这对于具有简短配置的项目非常适合,并且当进行配置的人员可以轻松编辑Scala时。

    Spring在配置方面非常灵活。可以通过XML配置或注释来驱动许多conf选项。

  4. 文档

    Lift的文档很年轻。 Spring的文档非常成熟。没有比赛。

    由于Spring的文档组织良好且易于查找,因此我将查看我为Lift找到的文档。 Lift文档基本上有4个来源:LiftWeb BookAPI Docs,LiftWeb的Google group和“Getting Started”。还有一套很好的代码示例,但我本身并不称它们为“文档”。

    API文档不完整。 LiftWeb Book已在树上发布,但也可以在线免费获取。这真的很有用,虽然它的确定的教学风格有时让我感到恼火。这有点长的教程和合同的短缺。 Spring有一本适当的手册,Lift没有。

    但是Lift确实有一套很好的例子。如果您习惯阅读Lift代码和示例代码(并且您已经熟悉Scala),那么您可以在相当短的时间内完成工作。

  5. 这两个框架都很引人注目。有广泛的应用程序,您可以选择并做得很好。

答案 2 :(得分:11)

我建议你查看play框架,它有一些非常有趣的想法,支持Java和Scala开发

答案 3 :(得分:10)

只是为了好玩。并且为了学习新的编程方法。

答案 4 :(得分:10)

我强烈期待将Lift用于最近的一个Web项目,而不是Spring MVC的忠实粉丝。我没有使用过最新版本,但早期版本的Spring MVC让你跳过很多环节来运行Web应用程序。我几乎在Lift上销售,直到我看到Lift可能非常依赖于会话,并且需要“粘性会话”才能正常工作。摘录自http://exploring.liftweb.net/master/index-9.html#sec:Session-Management

  

在有标准会话复制技术之前,您仍然可以   使用“粘性会话”对应用程序进行聚类。这一切都是如此   与HTTP会话有关的请求必须由相同的处理   群集节点

因此,一旦需要会话,用户就必须固定到该节点。这就产生了对智能负载平衡的需求并影响了扩展,这使得Lift无法成为我的解决方案。我最终选择http://www.playframework.org/并且非常高兴。到目前为止,Play一直稳定可靠,非常容易使用。

答案 5 :(得分:7)

没有从Java背景来到Lift和Scala,所以这不是来自个人经验,但我知道许多Lift开发人员发现Scala更加简洁高效语言而不是Java。

答案 6 :(得分:3)

扩展你的知识总是值得努力:)我刚开始学习Scala,它影响了我编写普通Java的方式,我可以说它到目前为止非常有用。

答案 7 :(得分:3)

我讨厌完全抛弃你的世界。但是你可以在一个应用程序中使用Scala,Java,Lift,Spring,并且不会出现问题。

答案 8 :(得分:0)

以我的拙见,想象力才是最重要的。

让我们考虑你想写一个应用程序。如果你是一个不错的开发人员,应该已经在你的脑海中构建了应用程序。下一步是通过代码了解它是如何工作的。为了做到这一点,你需要通过一个功能将想象的应用程序传递给一个真实世界的应用程序。该函数是一种编程语言。所以

Real app = programming language (imagined app)

所以语言选择很重要。框架也是如此。这里有很多聪明的人会建议你选择什么,但最终,最能转化你想象力的语言/框架应该是你的选择。所以两者都是原型并做出选择。

至于我,我正在慢慢学习Scala和Lift并喜欢它。

答案 9 :(得分:0)

但主要问题是我们无法将弹簧与升力进行比较。 Lift基本上用作UI框架,Spring用作DI框架。
如果您正在开发具有大量后端的Web应用程序,请确保您可以使用电梯。
但是,如果您正在开发的具有一些系列后端的Web应用程序,并且您需要定义弹簧。