Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我要在Java/Spring上使用Scala/Lift?_Java_Spring_Scala_Lift - Fatal编程技术网

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

为什么我要在Java/Spring上使用Scala/Lift?,java,spring,scala,lift,Java,Spring,Scala,Lift,我知道这个问题有点悬而未决,但我一直在考虑将Scala/Lift作为Java/Spring的替代品,我想知道Scala/Lift相对于它的真正优势是什么。从我的角度和经验来看,Java注释和Spring确实减少了应用程序的编码量。Scala/Lift是否在这方面有所改进?只是为了好玩。为了学习新的编程方法 扩展您的知识始终是一项值得努力的工作:)我刚开始学习Scala,它影响了我编写普通Java的方式,我可以说到目前为止它非常有益 我不是从Java背景来学习Lift和Scala的,所以这不是我个

我知道这个问题有点悬而未决,但我一直在考虑将Scala/Lift作为Java/Spring的替代品,我想知道Scala/Lift相对于它的真正优势是什么。从我的角度和经验来看,Java注释和Spring确实减少了应用程序的编码量。Scala/Lift是否在这方面有所改进?

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

扩展您的知识始终是一项值得努力的工作:)我刚开始学习Scala,它影响了我编写普通Java的方式,我可以说到目前为止它非常有益

我不是从Java背景来学习Lift和Scala的,所以这不是我个人的经验,但我知道很多Lift开发人员发现Scala比Java更简洁、更高效。

让我们假设我们对Scala和Java同样熟悉,忽略(巨大的)语言差异,但与弹簧或升降机有关的差异除外

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

  • 春天比电梯大五年左右
  • Lift是单片的,只针对web;Spring是模块化的,面向web和“常规”应用程序
  • Spring支持过多的JavaEE特性;Lift忽略了那些东西
一句话,弹簧很重,而升力很轻。有了足够的决心和资源,你就可以扭转局面,但这两者都需要

在使用了这两种框架之后,以下是我脑海中一直存在的具体差异。这不是一个详尽的列表,我无论如何也无法编译。我觉得最有趣的就是

  • 观哲学

    Lift鼓励在片段/动作方法中放置一些视图材质。特别是代码片段中会散布编程生成的表单元素、
    s、
    s等

    这是强大而有用的,特别是因为Scala有一个内置的语言级XML模式。可以在Scala方法中内联编写XML,包括大括号中的变量绑定。对于非常简单的XML服务或服务模型来说,这是一件令人愉快的事情——您可以在一个非常简洁的文件中完成一套HTTP响应操作,而无需模板或大量的辅助配置。缺点是复杂性。根据您所走的路,视图和逻辑之间的关注点要么模糊分离,要么没有分离

    相比之下,定期使用Spring for webapps会在视图和其他所有内容之间强制执行一个强大的分离。我认为Spring支持几个模板引擎,但我只在一些重要的方面使用过JSP。用JSP做一个受Lift启发的“模糊MVC”设计是疯狂的。对于大型项目来说,这是一件好事,因为在这些项目中,阅读和理解的时间可能会非常多

  • 对象关系映射器选择

    Lift的内置ORM是“映射器”。有一个即将推出的替代方案叫做“记录”,但我认为它仍然被认为是阿尔法之前的。LiftWeb的书中有关于使用Mapper和JPA的章节

    Lift的功能虽然很酷,但只适用于Mapper(而不是JPA)

    当然,Spring支持一个函数。这里的关键词是“支持”。理论上,您可以将任何Java ORM与Lift一起使用,因为您可以从Scala调用任意Java代码。但Lift只真正支持Mapper和JPA(程度要小得多)。此外,在Scala中使用非平凡的Java代码目前并不像人们希望的那样无缝;使用JavaORM,您可能会发现自己在任何地方都使用Java和Scala集合,或者在Java组件内外转换所有集合

  • 配置

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

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

  • 文件

    Lift的文档很年轻。Spring的文档相当成熟。没有竞争

    因为Spring的文档已经组织得很好,很容易找到,所以我将回顾我为Lift找到的文档。基本上有4个升降机文档来源:the、the、LiftWeb和“”。还有一套很好的代码示例,但我不会把它们本身称为“文档”

    API文档不完整。LiftWeb的书已经在树上出版,但也可以在网上免费获得。它真的很有用,尽管它明确的说教风格有时让我恼火。教程有点长,合同有点短。弹簧有一个合适的手册,这是升降机所缺少的

    但Lift确实有一组很好的例子。如果您对阅读Lift代码和示例代码感到满意(并且您已经非常了解Scala),那么您可以在相当短的时间内解决问题


  • 这两个框架都很有吸引力。有很多应用程序,你可以选择其中一个,也可以做得很好。

    我不想让你的世界完全陷入混乱。但是你可以在一个应用程序中使用Scala、Java、Lift、Spring,并且不存在任何问题。

    我建议你检查play framework,它有一些非常有趣的想法,并支持Java和Scala的开发。

    我不得不说,我强烈不同意Dan LaRocque的回答

    电梯不是整体式的。它由离散元素组成。它不忽略J/EE元素,它支持JNDI、JTA、JPA等。您不必使用这些J/EE元素,这一事实有力地说明了Lift的模块化设计

    • Lift的观点哲学是“由开发人员决定”。Lift提供了一种不需要
      ajaxButton("Accept", () => {request.accept.save; 
                                  SetHtml("acceptrejectspan", <span/>}) ++ 
      ajaxButton("Reject", () => {request.reject.save; 
                                  SetHtml("acceptrejectspan", <span/>})
      
        serve {
          case "api" :: "user" :: AsUser(user) :: _ XmlGet _ => <b>{user.name}</b>
          case "api" :: "user" :: AsUser(user) :: _ JsonGet _ => JStr(user.name)
        }
      
      Real app = programming language (imagined app)