我已经阅读了很多关于Apache Wicket的好消息,但很难找到坏事。由于没有框架始终是解决每个问题的正确解决方案,Wicket的缺点是什么以及您不会使用哪种类型的项目?
也许不是一个受欢迎的问题,但我认为这是一个重要的问题。
答案 0 :(得分:24)
Wicket要求一些非常可靠的编码实践。例如,如果您在组件中存储IModel,但不将其用作组件的模型,则它不会自动分离并且可能会破坏会话大小。这种管理不是大多数Java用户习惯的。
Wicket处于活动状态且经常更新。这很好,但每次我更新到新版本时,我都意识到我需要进行大量的重构才能转向更好的编码实践(1.4引入的泛型,1.4.x引入了onConfigure(),1.5有一些不同的资源策略)。同样,所有这些都是很好的更新,并推动你更好的代码,但我羡慕人们现在来到Wicket,而不是两年前:)
结合上述两点,我觉得Wicket在你超越基本功能集后会假设一些真正的编程技巧。如果你是一个优秀的开发人员,你会喜欢Wicket可以为你做的事情(而且代码在JavaDoc中有很好的记录)。如果你是初学者,当你变得更深时,你可能会感到沮丧。
此外,虽然它在Google App Engine上“有效”,但我发现有几个问题阻止它在该环境中舒适地工作。这是一个不同的讨论。
我的免责声明是我没有使用任何其他东西,所以也许其他框架更糟糕。
答案 1 :(得分:12)
在现实世界中,Wicket的开发速度非常慢。如果您没有像装配线上的工厂工人那样使用预先封装的组件,那么生产率会停止,直到您可以制作新的Panel。代码复杂性增加,并且很难读取代码,因为您实际上是要加倍编写的代码行。你一直在寻找如何在互联网和书籍上做琐碎的事情。例如,一个简单的重置按钮是一行HTML,但在Wicket中需要谷歌搜索如何执行此操作。它使简单的事情变得艰难而艰难。
我还没有看到使用Wicket构建的非常复杂的UI。 Wicket只能使用由预先包装的组件组成的简单UI。我用Wicket构建的每个UI都可以拥有更清晰的代码库,如果它不是在Wicket中完成的,它可以通过删除Wicket来更好地扩展。 Wicket也不会给你带来很好的UI小部件。即使是Wicket的jQuery UI实现也不如直接使用jQuery UI。
在我的工作中阅读了成千上万行的Wicket代码后,我可以说Wicket代码基本上是意大利面条代码。如果你喜欢ulgy,不优雅,冗长,带有泛型和匿名内部类的代码,而不是Wicket就是你的东西。线路噪声量非常高。由于这个原因,代码库变得不易维护。如果您使用有缺陷的Wicket AJAX实现,则尤其如此。
答案 2 :(得分:10)
有几个答案声明wicket 无法动态创建组件树。 说真的,我认为你们正在那里使用不同的检票口;)
首先: Wicket是基于组件的,而不是随机的HTML生成器。
获取动态组件树实际上非常容易:
想要用另一个组件替换组件吗? 使用Component.replaceWith(Component)(非常适用于空的MarkupContainer)
需要动态更改面板列表吗? 把它们放在转发器中。
让组件消失? 使用Componente.setVisible()
还有很多方法可以做到这一点。
所以,那些认为你不能做动态组件树的人,请提供一些例子,我很乐意讨论这些。
(如果你真的需要更灵活,你可以从不同的来源制作Wicket加载标记。我从来没有为了构建动态树而能够从数据库或通过网络检索标记)
答案 3 :(得分:7)
我发现检票口非常有用,但这些都是我迄今为止发现的缺点:
答案 4 :(得分:2)
请在此处查看我的回答:
当然,我将它们列为优势,但很容易理解为什么有人会有相反的感受。
虽然在Wicket中绝对不能做任何事情,但是有一些潜在的概念(我不会称之为哲学,因为我讨厌过度使用这个词),你应该遵循它。你越远离这个概念,就越难把它变成Wicket。
答案 5 :(得分:0)
我发现Wicket有两件事令人讨厌:
Ajax调用是同步执行的(它们在客户端排队以避免并发问题),所以Ajax实际上只是JAX。编辑:显然我错了,请参阅marting-g的评论。
API似乎并不关心封装,所以你会发现很多的公共方法记录为“这不是公共API的一部分。不要调用这个方法。 “ (或类似的东西)。
答案 6 :(得分:0)
我没有使用Wicket,所以如果必须的话,请继续投票给我,但是Wicket是基于组件的。如果您更喜欢基于组件的解决方案,那么这对您来说不会是一个劣势,但我发现基于竞争组件的框架具有限制性。
从JSF(也是一个基于组件的模型)到Spring MVC(更多基于行动)的几年来,我觉得枷锁被解除了。 mgv响应中的第三点,“你不能动态定义组件树,因为你必须在HTML布局和Java代码中定义它们”总结了我沮丧的大部分原因。
答案 7 :(得分:0)
Apache Wicket的主要问题是缺乏良好的在线参考资料。我已经做了大量的谷歌搜索,例如选择框等简单的事情,并且很难找到一些能帮助我不仅让选择框工作的东西,而且理解为什么我这样做。此外,我在那里搜索了很多,并没有找到关于如何构建Wicket应用程序的关键概念的良好基本概述。
在这个时代,我不应该买一本书来学习网络编程框架。我曾经遇到过的所有其他网络编程问题都经过了几次谷歌搜索。相比之下,仍然有一些Wicket的部分我不明白,因为我还没有找到任何体面的文档,在论坛上提问是有限的,因为我不知道我认为是一个可靠的理解Wicket在阅读完在线文档之后。