对于我的下一个项目,一个网络应用程序,应该使用scala + wicket或scala + lift?

时间:2010-07-12 20:27:48

标签: scala wicket lift

鉴于Scala语言的各种优点,我决定在Scala中编写我的下一个Web应用程序。但是,我应该使用Wicket还是Lift?我对Wicket很熟悉,并且很喜欢它,但对Lift的了解很少。在这种背景下学习Lift值得付出努力吗?

顺便说一句,Lift与Wicket相比如何?鉴于网络应用程序将在Scala中,使用Lift可以让我作为开发人员更轻松吗?

3 个答案:

答案 0 :(得分:29)

如果你喜欢Wicket,你应该坚持你所知道的&喜欢。 Wicket是一个很好的Web框架,可以使用Scala& amp; Wicket非常好,因为你可以使用Scala的特性在Wicket中编写类...它确实减少了样板与Java的对比。

Lift具有Wicket不具备的优势:

  • 更好的Ajax支持。 Lift的Ajax支持远没有Wicket那么冗长。如果你要做很多Ajax,学习Lift可能很有价值。
  • 彗星支援。如果您的应用程序具有服务器推送组件,则Lift提供比任何其他Web框架更好的彗星支持。
  • 电梯更像Scala。如果你来自Java,那么Lift使用模式匹配和函数传递是一种学习曲线。

就本主题中的评论而言,我不同意所作的一些陈述:

  • Lift不要求您混合演示文稿和业务逻辑。有很多选项可供您根据您的编码风格进行适当的构建,从完全离开的演示和逻辑到将两者完全自由地混合在一起。你的选择。
  • Lift与Rails不做同样的事情。 Lift不是另一个我的MVC框架,也没有把我的大部分时间都集中在Lift的CRUD方面。 Lift涉及安全性,开发人员生产力,可维护性以及构建高度交互式(Ajax和Comet)Web应用程序。 Lift库包含许多模块,包括许多ORM模块,JSON支持等。这部分是由于2年前Scala中图书馆的缺乏以及Lift社区非常棒的事实。支持性和Lift发布过程非常有效(每月里程碑版本的稳定性足以为Foursquare提供支持。)
  • Lift不关注HTTP请求/响应周期。 Lift专注于抽象那些人。开发人员花费更少的时间来担心参数命名以及更多时间关注业务逻辑。

但是,再一次,如果你喜欢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框架可以快速进入功能状态,或者为不会经常更改的数据构建简单的管理界面。