鉴于 Scala 语言的各种优势,我决定用 Scala 编写我的下一个 Web 应用程序。但是,我应该使用 Wicket 还是 Lift?我对 Wicket 很熟悉,也很喜欢,但对 Lift 知之甚少。在这种情况下学习 Lift 值得吗?
换句话说,Lift 与 Wicket 相比如何?鉴于 Web 应用程序将使用 Scala,使用 Lift 是否可以让我作为开发人员的生活更轻松?
如果你喜欢 Wicket,你应该坚持你所知道和喜欢的。Wicket 是一个很好的 Web 框架,使用 Scala 和 Wicket 非常好,因为您可以使用 Scala 的特性在 Wicket 中编写类……它确实减少了与 Java 相比的样板文件。
Lift 具有 Wicket 所没有的优势:
就该线程中的评论而言,我不同意所做的一些陈述:
但是,再一次,如果你喜欢 Wicket,坚持使用 Wicket 是一个不错的选择……Wicket 在 Scala 中甚至更好。
Wicket 和 Lift 是完全不同的野兽。我对这两个框架都有一些了解(但远非您通常在这里看到的专家级别):
Wicket:网站上的每个页面都有一个 HTML 模板页面和一个 Java/Scala 支持类。Wicket 的魔力是将 HTML 模板页面连接到相应的类,并将模板中的每个 Wicket ID 映射到类中正确的方法,以便在生成的发送给客户端的 HTML 页面中可以看到数据。就是这样。Wicket 是纯网络,仅此而已。在 Wicket 中编写自己的图形组件并从中继承非常容易。
Lift:Lift 是 David Pollak 针对他在 Rails 中遇到的问题而创建的。他需要的是性能和安全性。Lift 比 Rails 更快、更安全。它实际上非常安全,可以自动处理 SQL 注入、CRSF、XXS、重放攻击。
Lift 与 Rails 做同样的事情(映射到 DB),但与 Rails 有很大不同。Rails 的精神遗产是可见的,因为 Lift 中的一些 API 使用 Ruby 语法(在检查器中带有下划线和问号),这可能会让 Scala 开发人员感到惊讶。Lift 不是像 Wicket 这样的经典 MVC 框架,它是 Model-ModelView-View。实际上,Lift 更关注请求-响应周期。它旨在模拟事件驱动的 GUI 编程(如 Java Swing 或 .NET GUI)。这意味着 HTML 元素和动作写在同一个地方:
var inputName = ""
SHtml.text(inputName,s => inputName = s)
此代码将创建一个输入 HTML 标记,如下所示:
<input type="text" value=""/>
并将函数连接到变量,以便存储输入。即使使用 AJAX 代替 HTTP GET/POST,结构也是相同的。
Lift 富有表现力且功能强大,但并不容易。
如果这不准确,请纠正我!
我在 Lift 中制作了几个 webapps。我来自传统的 Java 背景,有很多 Maven + JSF/Facelets + Spring + Hibernate,我必须承认,虽然我喜欢 Scala,但我对 Lift 的一些弱点感到沮丧。特别是,我认为片段经常将业务规则与界面细节混合在一起。此外,实施全面的单元测试非常困难。
我不熟悉 Wicket,但目前我正在使用 Play Framework 编写应用程序。Scala 支持大部分工作得很好,并且有一个 Akka 模块。Akka 非常适合任何需要扩展的重要应用程序。
Play 看起来很有前途,尽管它仍在积极开发中,但文档似乎也相当不错。CRUD 框架非常适合快速进入功能状态,或者为不会经常更改的数据构建简单的管理界面。