2010-07-12 60 views
20

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

为了话,如何提升比较检票口?鉴于网络应用程序将在斯卡拉,可以使用电梯使我的生活更容易开发?

+0

你的应用程序要做什么?你需要什么功能? Wicket不支持或不轻易支持,您希望能做什么? – 2010-07-12 20:28:48

+0

网络应用程序最终可能会变得非常复杂,但为了简单起见,我们假设网络应用程序将有一个包含多个搜索字段的页面和一个显示搜索结果的表格。大多数其他页面也可能包含表单。 – Ceki 2010-07-12 20:53:37

回答

29

如果你喜欢Wicket,你应该坚持你所知道的&之类的。 Wicket是一个很好的Web框架,它可以做Scala & Wicket非常好,因为你可以使用Scala的特性来构建Wicket中的类......它真的减少了与Java的样板。

电梯都有自己的长处是检票不会:

  • 好多了Ajax支持。 Lift的Ajax支持远不及Wicket的。如果你打算做很多Ajax,学习Lift可能是有价值的。
  • 彗星支持。如果你的应用程序有一个服务器推送组件,Lift比其他Web框架提供更好的慧星支持。
  • 电梯更像斯卡拉。如果你来自Java,那么Lift使用模式匹配和函数传递是一条学习曲线。

在这个线程的意见方面,我想用一些所作的发言不同意:

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

但是,再一次,如果你喜欢Wicket,坚持Wicket是一个不错的选择...... Wicket在Scala中更加出色。

10

我在Lift中制作了几个webapps。来自传统的Java背景和许多Maven + JSF/Facelets + Spring + Hibernate,我必须承认,尽管我喜欢Scala,但我对Lift的一些弱点感到沮丧。特别是,我认为片段通常将业务规则与界面细节混合在一起。另外,实施全面的单元测试非常困难。

我不熟悉的检票,但此刻我正在写使用Play框架的应用程序。 Scala支持大多工作得很好,并且有一个Akka模块。对于任何需要扩展的非平凡应用来说,Akka都很棒。

游戏看起来非常有前途,即使它仍然在积极发展的文件似乎是相当不错的,以及。 CRUD框架非常适合快速进入功能状态,或者为不会经常更改的数据构建简单的管理界面。

+2

Play上的+1。看起来非常棒! – 2010-07-12 23:59:40

+0

+1播放。简单,轻量级,无状态=可扩展,功能强大。 – sirmak 2010-07-13 18:00:17

+0

您是在暗示java + play还是scala + play? – rogerdpack 2010-07-29 21:07:14

15

Wicket和Lift是完全不同的野兽。我有两个框架的一些知识(但远非专家级你平时看这里):

检票:在网站的每个页面有一个HTML模板页面和一个Java/Scala的支持类。 Wicket的魔术是将HTML模板页面连接到相应的类,并将模板中的每个Wicket ID映射到类中的正确方法,以便在发送到客户端的生成的HTML页面中显示数据。而已。 Wicket是纯粹的网络,仅此而已。我很容易在Wicket中编写自己的图形组件,并从它们继承。

电梯:电梯是由大卫·波拉克创建为他与Rails的问题的反应。他需要的是性能和安全性。电梯比Rails更快,更安全。它实际上非常安全,并自动处理SQL注入,CRSF,XXS,重放攻击。

提起做同样的事情铁轨(映射到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,结构也是一样的。

电梯表现力强大,但不是很容易。

如果这不正确,请纠正我的错误!

+0

我不会将Wicket描述为“古典MVC”。事实上,MVC的问题正是克服困难的工作。 Wicket中没有真正的“控制器”。这也是非常OO,这使得MVC非常可怕。我不会说典型的Web MVC完全符合面向对象的体系结构。 – jpswain 2011-02-06 06:29:41

+0

@ orange80你可能是对的。如果Swing是纯粹的MVC,那么Wicket不是“那么多”MVC(如Swing)。可能让我感到困惑的是,Swing和Wicket都非常OO,就像你说的那样。 – 2011-02-09 12:29:49

相关问题