关闭。这个问题是opinion-based .它目前不接受答案。
想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题.
7年前关闭。
Improve this question
我知道这个问题有点开放,但我一直将 Scala/Lift 视为 Java/Spring 的替代品,我想知道 Scala/Lift 相对于它的真正优势是什么。从我的角度和经验来看,Java Annotations 和 Spring 确实最大限度地减少了您必须为应用程序执行的编码量。 Scala/Lift 是否对此有所改进?
最佳答案
假设我们对 Scala 和 Java 同样熟悉,并忽略(巨大的)语言差异,除非它们与 Spring 或 Lift 相关。
Spring 和 Lift 在成熟度和目标方面几乎截然相反。
一句话,Spring是重量级的,Lift是轻量级的。有了足够的决心和资源,您就可以扭转局面,但这两者都需要很多。
在使用这两个框架后,以下是我脑海中浮现的具体差异。这不是一个详尽的列表,无论如何我都无法编译。对我来说最有趣的是什么......
Lift 鼓励在片段/操作方法中放置一些 View Material 。片段代码尤其会散布以编程方式生成的表单元素,
<div>
s, <p>
s 等。这是强大而有用的,尤其是因为 Scala 具有内置的语言级 XML 模式。可以在 Scala 方法中编写内联 XML,包括括号中的变量绑定(bind)。这对于非常简单的 XML 服务或服务模型来说是令人愉快的——您可以在一个非常简洁的文件中生成一套 HTTP 响应操作,而无需模板或大量伴随的配置。缺点是复杂。根据您走多远, View 和逻辑之间的关注点要么模糊分离,要么没有分离。
相比之下,Web 应用程序经常使用 Spring 会强制 View 和其他所有内容之间进行强分离。我认为 Spring 支持多种模板引擎,但我只在任何严肃的事情中使用过 JSP。使用 JSP 进行受 Lift 启发的“模糊 MVC”设计将是疯狂的。这对于大型项目来说是一件好事,因为阅读和理解的时间可能会让人不知所措。
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 组件内外转换所有集合。
Lift 应用程序几乎完全通过应用程序范围的“Boot”类方法进行配置。换句话说,配置是通过 Scala 代码完成的。这非常适合具有简短配置的项目,并且当进行配置的人可以轻松地编辑 Scala 时。
Spring 在配置方面非常灵活。许多 conf 选项可以通过 XML 配置或注释来驱动。
Lift 的文档还很年轻。 Spring 的文档非常成熟。没有比赛。
由于 Spring 的文档已经井井有条且易于查找,因此我将查看我为 Lift 找到的文档。 Lift 文档基本上有 4 个来源:LiftWeb Book , API Docs , LiftWeb的Google group ,和“Getting Started”。还有一套很好的代码示例,但我不会将它们称为“文档”本身。
API 文档不完整。 LiftWeb Book 已经出版在树上,但它也可以在线免费获得。它真的很有用,虽然它明显的说教风格有时让我很恼火。教程有点长,契约(Contract)有点短。 Spring 有一本合适的手册,而 Lift 却没有。
但 Lift 确实有一组很好的例子。如果您喜欢阅读 Lift 代码和示例代码(并且您已经很了解 Scala),那么您可以在相当短的时间内解决问题。
这两个框架都令人信服。有很多应用程序可供您选择并做得很好。
关于java - 为什么我要在 Java/Spring 上使用 Scala/Lift?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2683914/