2011-03-31 59 views
28

我讀過很多關於Apache Wicket的好東西,但很難找到不好的東西。由於沒有框架總是適合每個問題的正確解決方案,Wicket的缺點是什麼以及哪種類型的項目你不會使用它?Apache Wicket有什麼缺點?

也許不是一個受歡迎的問題,而是我認爲的一個重要問題。

+0

爲什麼它不受歡迎?就像所有的開發工具一樣,在沒有情緒的情況下查看和分析它是非常重要的。 – biziclop 2011-03-31 23:04:48

回答

21

Wicket需要一些非常紮實的編碼實踐。例如,如果您在組件中存儲IModel,但不要將其用作組件的模型,則它不會自動分離,並且可能會炸燬您的會話大小。這種管理不是大多數Java用戶習慣的。

檢票激活並經常更新。這很好,但每次我更新到新版本時,我都意識到我需要做大量重構才能轉向更好的編碼實踐(1.4引入的泛型,onConfigure()引入了1.4.x,1.5有一些不同的資源策略)。再次,所有都是很好的更新,並推動你走向更好的代碼,但我羨慕現在來到Wicket而不是兩年前的人:)

結合以上兩點,我覺得Wicket假設一些真正的編程技巧功能集。如果您是一位優秀的開發人員,您將會喜歡Wicket能爲您做的事情(並且代碼在JavaDoc中有很好的記錄)。如果你是初學者,當你變得更深時,你可能會感到沮喪。

此外,雖然它在Google App Engine上「起作用」,但我發現了一些問題,導致它在該環境中無法正常工作。這是一個不同的討論。

我的聲明是我沒有使用其他任何東西,所以也許其他框架更糟。

+4

@Martin - 真的嗎?我發現wicket編碼的簡潔性是最大的好處。當然,如果你陷入了一個JSP世界,你希望將Java代碼嵌入到表示層工件中,那麼你可能不會喜歡Wicket,也不會理解其他人爲什麼這麼做。 – Volksman 2013-06-14 02:48:35

+0

@Volksman我正在與現代方法(REST + Web客戶端)進行比較,其中服務器和客戶端的分離是真實存在的。 – 2013-06-14 09:19:03

+0

Wicket和Wickman – 2015-08-17 12:01:45

7

我發現檢票真的很有用,但這些將是到目前爲止,我已經找到了缺點:

  • 稀疏文件:我還沒有找到一個明確的到檢票口,即使有很大的文章和幾本書
  • 檢票網址是醜陋的默認
  • 不能動態定義組件樹,因爲你在HTML佈局和Java代碼
來定義他們倆
+5

我發現Wicket in Action的確如你所需。你覺得從那裏錯過了什麼?到目前爲止,URL編碼策略是我見過的用於全面實施合理URL的最簡單的解決方案,當然您可以通過實現自己的組件來定義動態組件樹。雖然你真的不應該因爲他們沒有真正的需要。 – biziclop 2011-03-31 22:55:21

+1

文檔並不是很好,但書籍確實填補了這個空缺;網址默認爲醜陋,但可以很容易地進行美化;您可以動態地定義組件樹,但您不能像在類似JSP的模板框架中那樣按照特定的方式進行。 – tetsuo 2011-04-01 12:33:46

+0

Wicket自從幾年以來在網上提供了一個非常棒的綜合性用戶指南,無需支付任何費用,即可維護所有最新版本:http://wicket.apache.org/learn/#guide – 2017-03-16 08:22:31

0

有兩件事情,我發現惱人的使用Wicket:

  • Ajax調用同步進行(他們正在排隊的客戶端,以避免併發問題),所以阿賈克斯只有JAX,其實。編輯:顯然我錯了,看到marting-g的評論以下。

  • API似乎並不太在乎封裝,所以你會發現很多公共方法記錄爲「這不是公共API的一部分,不要調用這個方法。」 (或類似的東西)。

+4

AJAX調用排隊在客戶端通道/隊列名稱。即您可以通過重寫AbstractAjaxBehavior#getChannelName()來使它們再次異步。 – 2011-04-01 06:22:52

+1

+1提示:)。但是這個方法實際上是在AbstractDefaultAjaxBehavior中,它完全沒有文檔。 – 2011-04-01 08:35:10

+0

這不是PUBLIC API業務的一部分,可能是因爲他們將代碼拆分爲多個包,並且不同包中的類彼此交談的唯一方法是通過公共方法,即使他們是合作者。這是大型項目中的常見問題。真的,這是Java的訪問控制機制的貧困。不過,你說得對,這很煩人。 – 2011-04-01 08:57:12

0

我沒有使用Wicket,所以如果必須的話,請繼續往下投票,但Wicket是基於組件的。如果你更喜歡基於組件的解決方案,那麼這對你來說不會是一個缺點,但是我發現了一個基於競爭的基於組件的限制性框架。

從幾年的JSF(也是基於組件的模型)到Spring MVC(基於更多操作),我覺得枷鎖被解除了。 mgv的迴應中的第三點是,「你不能動態地定義組件樹,因爲你必須在HTML佈局和Java代碼中定義它們」,這些總結了我很多挫折的原因。

+5

我一直被迫使用JSF並討厭它,我一直很喜歡Spring MVC,而且我一開始對Wicket非常懷疑。現在,wicket成爲了我作爲Java Web框架的明確首選,儘管我仍然是一位大型的Spring粉絲。所以忘記JSF和Wicket之間的任何相似之處。 – 2011-04-01 08:45:05

+4

JSF!= Wicket。你會說Spring MVC和Struts 1是一樣的,只是因爲它們都是基於動作的框架? – tetsuo 2011-04-01 12:30:38

+0

是的,我得到你們都來自哪裏,這就是爲什麼我開始我的帖子,「我沒有使用wicket」,並基於我的基於組件框架的唯一經驗。您對Spring MVC與Struts 1的觀點非常有效,現在您已經說過了,我在很多年前就和Struts 1一起玩過,這是一個可怕的,基於行爲的體驗。 – digitaljoel 2011-04-01 15:18:53

2

見我的答案在這裏:

https://stackoverflow.com/questions/5489712/why-would-someone-choose-wicket-over-struts-2-or-other-framework-or-viceversa/5491686#5491686

當然,我列出了他們的優勢,但它很容易明白爲什麼有人會覺得相反。

雖然在Wicket中你絕對無法做到,但你應該遵循某些基本概念(我不會稱之爲哲學,因爲我討厭過度使用這個詞)。你偏離這個概念的越遠,它就越難將其硬塞入Wicket。

12

在現實世界中,Wicket的發展速度非常緩慢。如果在裝配線上沒有像工廠工人一樣使用預製罐組件,那麼生產力會停止下來,直到您可以製作新面板。代碼複雜性增加,並且很難閱讀代碼,因爲您正在有效地將需要編寫的代碼行加倍。你一直在尋找如何在互聯網和書本上做些微不足道的事情。例如,一個簡單的重置按鈕是HTML的一行,但在Wicket中,它需要使用谷歌搜索如何做到這一點。它使簡單的事情變得艱難困難。

我還沒有看到用Wicket構建的非常複雜的UI。 Wicket只能使用由預罐裝組件組成的簡單UI。我所看到的每個用Wicket構建的用戶界面都可以擁有更清晰的代碼庫,如果它沒有在Wicket中完成的話,那麼通過刪除Wicket就可以實現更好的擴展。 Wicket也沒有購買任何好用的UI部件。即使是Wicket的jQuery UI實現也不如僅僅直接使用jQuery UI。

在我的作品中閱讀了成千上萬行Wicket代碼之後,我可以說Wicket代碼基本上是意大利麪條代碼。如果你喜歡ulick,不雅,冗長的代碼,泛型和匿名的內部類比Wicket更重要。線路噪聲量非常高。由於這個原因,代碼庫變得不易維護。如果您使用有缺陷的Wicket AJAX實現,則尤其如此。

+0

你推薦什麼框架? – greenoldman 2012-07-29 10:30:06

+4

我認爲你可能會對此短視。 「我還沒有看到一個真正複雜的用戶界面內置的UI」 你知道UI通常是HTML和Javascript。你可以讓小門以各種方式填充。 我仍然是一個初學者,但你對此的態度是一個固執的人找藉口。 意大利麪代碼?不是在開源項目中,它似乎結構非常好,高度分離,有據可查的工具包。如果有人正在做意大利麪代碼,那就是你。 – HaMMeReD 2013-05-28 01:57:33

+1

我使用wicket很多,我們正在構建更復雜的用戶界面。與複雜的我的意思是,我們做拖放外部組件,有豐富的界面元素,如無限惰性滾動列表,SVG圖形等。 Wicket的學習曲線相當陡峭,因爲你需要知道它的內部工作原理。我發現Wicket非常優雅,組件樹,結合事件以及Wicket如何封裝Ajax(目前基於非常流行的jQuery框架),使它成爲構建複雜UI的非常強大的工具。 – RobAu 2013-11-18 15:07:03

9

幾個答案宣佈檢票是無法動態創建組件樹。 說真的,我們這些人正在不同的檢票口工作)

首先: Wicket是基於組件的,而不是隨機的HTML生成器。

它實際上相當不錯容易得到一個動態的組件樹:

要替換爲另一個組件? 使用Component.replaceWith(組件)(與空的MarkupContainer結合使用很有用)

需要動態更改面板列表嗎? 把他們放在一箇中繼器。

使組件失去效用? 使用Componente.setVisible()

還有更多的方法來做到這一點。

那麼,那些認爲你不能做動態組件樹的人,請提供一些例子,我很樂意就這些問題進行討論。

(如果你確實需要更加靈活,你可以從不同的來源檢票負荷標記。東西我從來沒有構建動態樹的緣故沒有,但要能夠從數據庫或通過網絡檢索標記)

+0

我同意動態組件樹可以做得很好,但比其他框架要複雜得多。如果不正確地完成,保持組件的id不同並且可尋址可能會讓你的設計亂七八糟。但對於所有其他任務,wicket真的很棒。特別是當你有一個好的組件代碼庫時。 – 2016-10-10 22:12:55

0

我的Apache Wicket的主要問題是缺乏好的在線參考資料。我做了大量的谷歌搜索,搜索諸如選擇框之類簡單的例子,並且很難找到一些能夠幫助我選擇框的工具,但要理解爲什麼我這麼做。此外,我已經搜索了很多,並沒有找到關於如何構建Wicket應用程序的關鍵概念的基本概述。

在這個時代,我不應該購買一本書來學習一個web編程框架。我曾經遇到過的其他每一個網絡編程問題都有一些Google搜索的答案。相比之下,仍然有一些Wicket的部分我不明白,因爲我還沒有找到任何體面的文檔,並且在論壇中提出問題是有限的,因爲我沒有我覺得只有在線閱讀後對Wicket有完全的理解文檔。

+0

爲什麼不呢,他正在清理說明沒有太多的在線幫助。對我來說這是一個缺點,並且確定了一個與 – user373201 2013-06-12 22:38:48

+0

問題有關的答案Wicket自從幾年以來一直是一個非常棒,全面的用戶指南,而無需支付任何費用,並維護了所有最新版本:http://wicket.apache.org /學習/#指南 – 2017-03-16 08:22:11