Apache Wicket和Apache Click的比较

19

Apache Wicket 和 Apache Click 有什么区别?Apache Click是否维护中?最新版本似乎是2008年11月发布的。谢谢,Achilleas

4个回答

41

Click是一个活跃开发的项目,并最近作为Apache顶级项目毕业。它正在将其迁移到新域名:http://click.apache.org。完成迁移后,下一个版本2.1.0将发布。

在比较Click和Wicket之前,请注意我是Apache Click的贡献者,但几年前已经评估过Wicket,因此对其工作方式有相当好的了解。

Click是一个无状态框架,而Wicket是有状态的。在Click中,页面和组件在每个请求中重新创建,而在Wicket中,页面和组件存储在会话中,并在后续请求中重复使用。

Wicket适用于构建复杂应用程序(考虑桌面),其中所有GUI状态都为您存储和管理。Click则适用于传统的Web应用程序,渲染页面所需的状态很少或根本不需要。如果需要存储状态,则必须通过添加/删除来自会话的状态来自行管理。值得一提的是,Wicket支持无状态页面,而Click支持有状态页面,但这并不是这些框架的常规做法。

另一个区别是,在Click中,控件知道如何渲染自己,因此您不必在页面模板中重复标记。如果您想要手动布局模板,仍然可以这样做,但这并不是必需的。在Wicket中,标记需要反映页面中创建的组件。Wicket的想法是,Java开发人员实际上不创建或维护模板,而是由设计师处理。

此致

Bob


4
很好的平衡回答。它们都有优点,而你恰当地捕捉到了这一点。 - Don Roby
1
Wicket 不一定是有状态的。默认情况下,您的 Wicket Web 应用程序是无状态的,只有在需要时才会切换到有状态模式。只要您在 Web 页面上仔细使用仅为无状态的组件(例如 org.apache.wicket.markup.html.form.StatelessForm),则应用程序将保持无状态。您还可以向应用程序添加 StatelessChecker 来强制实现无状态性。检查器将抛出有关有状态组件的异常,请参见我的其他帖子以了解如何设置它。 - Norbert Madarász

2

使用Wicket时,您只需使用纯HTML,而不像Click一样使用Velocity或JSP等模板语言。这不仅对程序员本身非常方便,因为他们只需要学习HTML和Java,而且对于工具(调试等)也非常方便。

它强制实现了用户界面和逻辑的更好分离。在Wicket中也不需要XML,这与Click不同。

还有一些更多的差异:Wicket的邮件列表流量更大;有更多的出版物(例如书籍)关于Wicket而不是Click;有更多的开发人员编写Wicket(看看这个这个


2
是的,Wicket构建了大约850,000行代码,而Click仅包含大约50,000行代码。这应该说明了它们的复杂性差异。根据这些信息,Click要简单得多。 - Palesz

2
Wicket提供更多的灵活性,让您可以更好地组合页面。您可以创建一个由组件构成的单个页面作为整个应用程序,或者按照您的意愿创建多个页面。Click是基于页面的。Wicket支持ajax开箱即用。如果浏览器不支持ajax,则Wicket中的大多数ajax组件会回退到普通的页面刷新。Wicket开箱即用有数十个组件,还有来自相关项目的其他数十个组件。我在Wicket中发现的一个很棒的功能是它的冗长性。这意味着我的应用程序所做的一切都是我创建的。我使用HTML和CSS编写整个演示文稿,没有任何生成的内容。从经验上看,缺少魔法是我最喜欢的一个优点。最后也是最不重要的一点,许多大型企业正在使用Wicket。Walmart移动版和Wellsfargo移动版都是使用Wicket完成的。

这意味着我的应用程序所做的一切都是我创建的。不,这意味着你在HTML中所做的一切都必须在Wicket页面中完成。没有什么比找不到与给定组件相关联的HTML元素或反之更令人沮丧的了。保持代码和标记同步是维护的噩梦。 - Gilberto

1

wicket 最大的缺点是它的状态性质。它可能很难进行单元测试和调试,也会使用更多的内存,可能会影响您的硬件预算。wicket 的状态性质副作用是它需要定期保存状态。为了做到这一点,所有对象都需要可序列化。

我刚开始研究 click。我喜欢它的无状态性质。Web 是请求/响应的,应该尽可能保持无状态性。

我也喜欢 click 如何与 Apache Cayenne 集成。


5
如果需要状态,有状态的特性不再是一个缺点。 - Don Roby
3
我认为这不总是正确的。在小型Web应用程序上,一个优秀的开发者可能不会遇到许多问题来维护复杂状态。如果我要构建一个大项目(10+开发人员),我一定会倾向于选择无状态解决方案。这样做更容易构建、测试、调试和维护。 - clarson
小心使用Wicket可以构建无状态Web应用程序。我已经使用Wicket编写了一个无状态的网店。请查看我的其他帖子以了解如何强制实现无状态。 - Norbert Madarász
2
Wicket在无状态模式下使用时非常糟糕。它很难调试,也很难维护Wicket应用程序。在某些情况下,使用Wicket的开发时间可能会大大缩短,但如果出现错误...那就结束了。我会选择Click。如果您想处理状态,那么可以使用一个简单的会话作用域Spring Bean来处理。就这样。 - Palesz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接