2010-07-12 58 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

相關問題