2011-03-31 56 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