Apache Wicket有哪些缺点?

CCC*_*CCC 33 java frameworks wicket

我已经阅读了很多关于Apache Wicket的好消息,但很难找到坏事.由于没有框架始终是解决每个问题的正确解决方案,Wicket的缺点是什么以及您不使用哪种类型的项目?

也许不是一个流行的问题,但我认为这是一个重要的问题.

jbr*_*ver 25

Wicket需要一些非常可靠的编码实践.例如,如果您在组件中存储IModel,但不将其用作组件的模型,则它不会自动分离并且可能会破坏会话大小.这种管理不是大多数Java用户习惯的.

Wicket活跃且经常更新.这很好,但每次我更新到新版本时,我都意识到我需要进行大量的重构才能转向更好的编码实践(1.4引入的泛型,1.4.x引入了onConfigure(),1.5有一些不同的资源策略).同样,所有这些都是很好的更新,并推动你更好的代码,但我羡慕人们现在来到Wicket,而不是两年前:)

结合上述两点,我觉得Wicket在你超越基本功能集后会假设一些真正的编程技巧.如果你是一个优秀的开发人员,你会喜欢Wicket可以为你做的事情(而且代码在JavaDoc中有很好的记录).如果你是初学者,当你变得更深时,你可能会感到沮丧.

此外,虽然它在Google App Engine上"有效",但我发现有几个问题阻止它在该环境中舒适地工作.这是一个不同的讨论.

我的免责声明是我没有使用任何其他东西,所以也许其他框架更糟糕.

  • @Martin - 真的吗?我发现wicket编码的简洁性是它最大的好处.当然,如果你陷入一个JSP世界,你喜欢在表示层工件中嵌入Java代码,你可能不会喜欢Wicket,也不会理解为什么其他人会这样做. (4认同)

小智 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实现,则尤其如此.

  • 我想你可能会对此有所了解."我还没有看到一个内置wicket的非常复杂的UI"你知道UI通常是HTML和Javascript.你可以通过各种方式让wicket填充.我仍然是检票口的初学者,但你对此的态度是一个顽固的人找借口.意粉代码?不是在开源项目中,它似乎是非常好的结构和高度分离,有良好记录的工具包.如果有人正在制作意大利面条代码,那就是你. (6认同)
  • 关于Wicket的重复投诉似乎是"你需要成为一名优秀/称职的Java程序员".如果您的Java商店正在招聘那些不是那样的人,那么您可能需要找到另一份工作;).Wicket无耻地面向对象,类型安全且极其强大,而且最重要的是,在正确的手中大量生产.它不是为那些已经意识到PHP不会为其企业应用程序削减它并且在周末学习Java然后想要在周一开始编写企业应用程序的人设计的. (6认同)
  • 我经常使用检票口,并且我们正在用它来构建更复杂的UI。复杂的意思是我们确实要拖放外部组件,具有丰富的界面元素,例如无限的懒惰滚动列表,SVG图形等。Wicket的学习曲线相当陡峭,对于这类东西,您还需要了解它在内部的工作原理。我发现Wicket非常优雅,并且组件树,事件以及Wicket如何封装Ajax(当前基于非常流行的jQuery框架)相结合,使其成为构建复杂UI的非常强大的工具。 (2认同)
  • 这是完全错误的。我觉得这是基于对代码或框架缺乏了解。我看不到您如何获得两倍的代码,而两倍却得到了什么?那是一个笼统的声明。Java的设计使用户可以随心所欲地执行代码,而不会受存储桶函数或方法的束缚,它更加灵活,如果正确使用Wicket,可以大大减少开发时间和LOC。唯一看到此问题的时间是当我遇到某人编写的代码时,并没有一定的实际经验。 (2认同)

小智 10

几个答案声明wicket 无法动态创建组件树.说真的,我觉得你们在那里用不同的检票口;)

首先:Wicket是基于组件的,而不是随机的HTML生成器.

获得动态组件树实际上非常容易:

想要用另一个组件替换组件吗?使用Component.replaceWith(Component)(与空MarkupContainer结合使用非常有用)

需要一个动态变化的面板列表?把它们放在转发器中.

让组件消失?使用Componente.setVisible()

还有很多方法可以做到这一点.

所以,那些认为你不能做动态组件树的人,请提供一些例子,我很乐意讨论那些.

(如果你真的需要更加灵活,你可以从不同的来源制作Wicket加载标记.我从来没有为了构建动态树而做的事情,但能够从数据库或通过网络检索Markup)


mgv*_*mgv 7

我发现检票口非常有用,但这些都是我迄今为止发现的缺点:

  • 稀疏文件:我还没有找到一个明确的指导检票口,即使有很大的文章和几本书
  • Wicket URL默认是丑陋的
  • 您无法动态定义组件树,因为您必须在HTML布局和Java代码中定义它们

  • 我发现Wicket in Action就像你需要的那样明确.你觉得那里缺少什么?到目前为止,URL编码策略是我看到的最简单的解决方案,可以全面实施合理的URL,当然,您可以通过实现自己的组件来定义动态组件树.虽然你真的不应该因为没有真正需要它们. (5认同)
  • Wicket几年以来一直在线提供了很棒的,全面的用户指南,而无需支付任何费用,并且为所有最新版本维护:http://wicket.apache.org/learn/#guide (2认同)