当前位置: 首页 > 面试题库 >

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

阳福
2023-03-14
问题内容

我知道这个问题有点悬而未决,但是我一直在将Scala / Lift视为Java / Spring的替代方案,我想知道Scala / Lift在此之上的真正优势是什么。从我的观点和经验来看,Java Annotations和Spring确实最小化了您为应用程序要做的编码量。Scala / Lift是否会对此有所改善?


问题答案:

假设我们对Scala和Java同样满意,并忽略(巨大的)语言差异,除非它们与Spring或Lift有关。

在成熟度和目标方面,Spring和Lift几乎完全相反。

  • Spring比Lift大五岁
  • 提升是整体的,仅针对网页;Spring是模块化的,同时针对Web和“常规”应用程序
  • Spring支持大量的Java EE功能。电梯无视那东西
    一句话,Spring是重量级的,Lift是轻量级的。有了足够的决心和资源,你就可以轻而易举地做到这一点,但是你同时需要很多。

在使用这两个框架之后,我想到的是具体的差异。这不是一个详尽的列表,无论如何我都无法编译。对我来说最有趣的事情就是…

  1. View philosophy

提升鼓励在片段/动作方法中放置一些视图素材。片段代码特别是将以编程方式生成的表单元素<div>s<p>s等等。

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

相比之下,针对Web应用程序的Spring常规使用会在视图与其他所有内容之间形成强烈的分隔。我认为Spring支持多个模板引擎,但是我只在严重的情况下使用过JSP。用JSP进行Lift启发的“模糊MVC”设计会很疯狂。在大型项目中,这是一件好事,在这里,阅读和理解的时间可能会很充沛。

  1. Object-Relational Mapper Choices

Lift的内置ORM是“映射器”。有一个即将到来的替代方法称为“记录”,但我认为它仍被认为是预Alpha版。LiftWeb手册包含有关同时使用Mapper和JPA的部分。

Lift的CRUDify功能非常酷,仅适用于Mapper(不适用于JPA)。

当然,Spring支持大量标准和/或成熟的数据库技术。那里的执行词是“支持”。从理论上讲,你可以将任何Java ORM与Lift一起使用,因为你可以从Scala调用任意Java代码。但是Lift仅真正支持Mapper和(在较小程度上)JPA。而且,当前在Scala中使用非平凡的Java代码并不是人们所希望的那样无缝。使用Java ORM,你可能会发现自己在任何地方都使用Java和Scala集合,或者将所有集合转换进Java组件或从Java组件转换出来。

  1. Configuration

提升应用几乎完全通过应用范围的“启动”类的方法进行配置。换句话说,配置是通过Scala代码完成的。这对于具有简短配置的项目以及进行配置的人员可以轻松编辑Scala而言非常理想。

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

  1. Documentation

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

由于Spring的文档已经井井有条,而且易于查找,因此我将回顾为Lift找到的文档。Lift文档基本上有4个来源:LiftWeb Book,API Docs,LiftWeb的Google组和“ 入门 ”。也有一套不错的代码示例,但是我不会将它们本身称为“文档”。

API文档不完整。LiftWeb书籍已在树木上出版,但也可以在线免费获得。它确实很有用,尽管其明确的教学风格有时会激怒我。教程很长,合同很短。Spring有适当的手册,Lift缺少。

但是Lift确实有很多很好的例子。如果你愿意阅读Lift代码和示例代码(并且已经非常了解Scala),则可以在很短的时间内完成工作。

这两个框架都很引人注目。你可以选择各种各样的应用程序,并做得很好。



 类似资料:
  • 正如文件所说: 过滤器基类,其目的是保证在任何servlet容器上每次请求分派都执行一次。 有一个问题什么是OncePerrecestFilter?我仍然不知道我们为什么要使用它。 它说“在任何servlet容器上”。这意味着有servlet容器将多次执行过滤器?

  • 问题内容: Java不能执行运算符重载,但可以用于和和其他一些类。这怎么可能? 更新: 为什么这样做? 问题答案: 不是操作员重载的示例。在语言中被内置为合并运算符 和 算术加法运算符。 这意味着用Java编写程序的人不能重载运算符,但是就Java语言的语法而言,它被定义为连接和加法运算符。 编辑 它适用于其他类,如和由于自动装箱。 如果您看一下执行字符串连接的Java程序的字节码,您会发现它创建

  • 我试图理解Scala代码如何在Java的IDE中与Java一起工作。我在使用Spark Java时遇到了这个疑问,在Spark Java中,我看到Scala包也在代码中,并且使用了相应的类和方法。 我的理解是,Scala代码需要Scala的编译器转换成Java.class文件,然后从它们开始JDK在JVM中完成它的部分,转换成二进制文件并执行操作。如果我说错了,请指正。 之后,在eclipse中的

  • 问题内容: 我在网上研究过immutablejs的好处,但是没有发现任何令人满意的东西! 我的问题是,当我可以冻结一个普通的旧javascript对象时,为什么我应该使用该库并使用非本机数据结构? 问题答案: 我认为您不了解immutablejs提供的功能。这不是一个使您的对象变得不可变的库,而是一个使用不可变值的库。 在不简单重复他们的文档和任务说明的情况下,我将说明它提供的两件事: 类型。他们

  • 问题内容: 好的,应该真的向Google的某人问这个,但我只想征询其他意见。 甚至Android也支持本机代码应用程序,主要的开发工具是Java。但为什么?我的意思是,在移动设备上解释代码是否太慢?谷歌在介绍Froyo时说,新的JIT编译器可以使应用程序速度提高2-5倍。这意味着,通过本机代码使用Java的速度要慢2倍。 是的,我知道使用托管代码应用程序在系统稳定性方面更加安全,因为虚拟机可以更好

  • 我是一名spark Scala程序员。我有一份spark工作,其中包含完成整个工作的子任务。我想使用ToFutures并行完成子任务。一旦完成整个工作,我必须返回整个工作响应。 关于scala Futures,我听说一旦主线程执行并停止,其余线程将被终止,并且您将得到空响应。 我必须使用等待。结果以收集结果。但是所有的博客都告诉你应该避免等待。结果是,这是一个糟糕的做法。 正在使用等待。在我的案例