鉴于Scala语言的各种优点,我决定在Scala中编写我的下一个Web应用程序。但是,我应该使用Wicket还是Lift?我对Wicket很熟悉,并且很喜欢它,但对Lift的了解很少。在这种背景下学习Lift值得付出努力吗?
顺便说一句,Lift与Wicket相比如何?鉴于网络应用程序将在Scala中,使用Lift可以让我作为开发人员更轻松吗?
答案 0 :(得分:29)
如果你喜欢Wicket,你应该坚持你所知道的&喜欢。 Wicket是一个很好的Web框架,可以使用Scala& amp; Wicket非常好,因为你可以使用Scala的特性在Wicket中编写类...它确实减少了样板与Java的对比。
Lift具有Wicket不具备的优势:
就本主题中的评论而言,我不同意所作的一些陈述:
但是,再一次,如果你喜欢Wicket,坚持使用Wicket是一个很好的选择...... Wicket在Scala中的表现更好。
答案 1 :(得分:15)
Wicket和Lift是完全不同的野兽。我对这两个框架都有一些了解(但是你通常在这里看到的专家级别还很远):
Wicket:网站上的每个页面都有一个HTML模板页面和一个Java / Scala支持类。 Wicket魔术是将HTML模板页面连接到相应的类,并将模板中的每个Wicket ID映射到类中的正确方法,以便数据在发送到客户端的生成的HTML页面中可见。而已。 Wicket是纯粹的Web,仅此而已。我很容易在Wicket中编写自己的图形组件并从中继承。
提升:由David Pollak创建的Lift是对Rails问题的反应。他需要的是性能和安全性。提升比Rails更快,更安全。它实际上非常安全,可以自动处理SQL注入,CRSF,XXS,重放攻击。
Lift与Rails(映射到数据库)的功能相同,但与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,结构也是相同的。
电梯具有表现力和强大功能,但并不容易。
如果不准确,请纠正我!
答案 2 :(得分:10)
我在Lift中制作了几个webapps。来自传统的Java背景,有很多Maven + JSF / Facelets + Spring + Hibernate,我必须承认,尽管我喜欢Scala,但我对Lift的一些弱点感到沮丧。特别是,我认为片段通常将业务规则与界面细节混合在一起。此外,实施全面的单元测试非常困难。
我不熟悉Wicket,但目前我正在使用Play Framework编写应用程序。 Scala支持大部分工作得很好,并且有一个Akka模块。 Akka非常适合任何需要扩展的非平凡应用程序。
播放看起来非常有前途,即使它仍在积极开发中,文档似乎也相当不错。 CRUD框架可以快速进入功能状态,或者为不会经常更改的数据构建简单的管理界面。