为什么要在Java / Spring上使用Scala / Lift?

问题:

我知道这个问题有点开放,但是我一直在看Scala / Lift作为Java / Spring的替代品,我不知道Scala / Lift有什么真正的优势。从我的角度和经验来看,Java Annotations和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是模块化的,既定位于网页和“常规”应用
  • Spring支持大量的Java EE功能;电梯忽略那些东西

在一句话中,Spring是重量级的,Lift是轻量级的。有了足够的决心和资源,你可以把它放在头上,但你需要两个lot
这是在使用两个框架之后陷入困境的具体差异。这不是详尽的列表,我无法编译。对我来说似乎最有趣

  1. 看哲学
    电梯鼓励使用片段/动作方法放置一些视图素材。代码片段代码特别会被编程生成的表单元素<div><p>等等。
    这是强大和有用的,特别是因为Scala具有内置的语言级XML模式。人们可以在Scala方法中内联XML,包括大括号中的变量绑定。这对于非常简单的XML服务或者服务的模型来说可能是令人愉快的 – 您可以在一个精美的简洁文件中敲出一套HTTP响应动作,而不需要模板或配置。缺点是复杂。取决于你走多远,视野和逻辑之间存在着模糊的分离关系,或者不分离。
    相比之下,定期使用Spring for webapps会在视图和其他所有内容之间强制分离。我认为Spring支持几个模板引擎,但是我只使用了任何严重的JSP。用JSP进行电梯启发的“模糊MVC”设计将是疯狂的。对于大型项目来说,这是一件好事,那里只是阅读和理解的时间可以压倒一切。
  2. 对象关系映射器选择
    Lift的内置ORM是“Mapper”。有一个即将到来的选择“记录”,但我认为它仍然被认为是前alpha。 LiftWeb Book具有使用Mapper和JPA的部分。
    Lift的CRUDify功能非常酷,只适用于Mapper(而不是JPA)。
    当然,Spring支持panoply of standard and/or mature database technologies。操作词有“支持”。理论上,您可以使用任何Java ORM与Lift,因为您可以从Scala调用任意Java代码。但电梯只能真正支持Mapper和(在较小程度上)JPA。此外,在Scala中使用不平凡的Java代码目前还不如人们可能喜欢的那样无缝;使用Java ORM,您可能会发现自己既可以使用Java或Scala集合,也可以将所有集合转换出Java组件。
  3. 组态
    升级应用程序几乎完全通过应用程序范围“Boot”类的方法配置。换句话说,配置是通过Scala代码完成的。这对于具有简短配置的项目以及进行配置的人员很适合编辑Scala是完美的。
    Spring在配置上非常灵活。许多conf选项可以通过XML配置或注释来驱动。
  4. 文档
    电梯的文件很年轻。春天的文档很成熟。没有比赛
    由于Spring的文档已经很好地组织起来,很容易找到,我将查看我发现的Lift的文档。电梯文件基本上有4个来源:LiftWeb BookAPI Docs,LiftWeb的Google group和“Getting Started”。还有一个很好的代码示例,但是我本来不会称之为“文档”。
    API文档不完整。 LiftWeb Book已经在树上发布,但也可以在线免费获得。这是非常有用的,虽然它的决定性的教学风格刺激了我有时。在教程和短契约上有点长。春天有一个适当的手册,电梯缺乏。
    但电梯有一套很好的例子。如果您阅读电梯代码和示例代码(您已经知道Scala已经很好了),您可以按照相当短的顺序进行处理。

这两个框架是引人注目的。有各种应用程序,您可以选择并做好。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Why would I use Scala/Lift over Java/Spring?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

5 + 3 =