Apache Wicket有哪些优势?

22

我不是Java开发人员,所以可能会说错一些术语...

我要集成的一个应用正在从Spring转向Wicket。虽然这不应该影响我的集成,但我想知道他们为什么要这样做?

据我所知,Spring是更受欢迎的框架。除了它很受欢迎之外,我对它一无所知。我确实阅读了Wicket页面,Wicket似乎非常简单和直观。

Wicket有哪些优点?

在我看来,改变整个框架需要做一些工作,因此我想知道Wicket是否提供了Spring没有的东西?

10个回答

28

在我经常出入的圈子里,经常被吹捧的优点包括:

  1. 你的html可以完全符合xhtml标准——这非常好,因为它将表示层和逻辑层分离得非常好,只需要在标准html标记中使用wicketid属性即可。对于团队中只做很少或没有实际java工作的html/css/javascript客户端开发人员来说,这非常方便。据我所知,没有其他基于java的web框架可以声称拥有这一点。
  2. 没有针对任何特定于wicket的xml配置——一切都可以在源代码中完成,而且在.war文件中的标准web.xml文件中需要进行的工作很少。
  3. 组件化开发相当容易掌握——特别是对于非Web背景(例如Swing程序员)的人来说。在我看来,它比mvc更鼓励重用。

4
我注意到了卡钳网站上的第一点。看起来非常简洁明了。我在想:“这就是 asp.net 应该有的样子”(我是一名 .net 开发者)。 - dtc
点1 - 如果您正在开发一个中等规模的应用程序,您的HTML将最终包含wicket:border,enclosure,container,panel标签。因此,您的HTML开发人员仍需要了解Wicket标签-请参阅http://cwiki.apache.org/WICKET/wickets-xhtml-tags.html以获取列表。因此,并不像所声称的那样干净地分离。 - Mike
1
Tapestry [http://tapestry.apache.org/] 已经有纯 HTML 模板相当长一段时间了。 - crowne
有没有可能将Wicket应用程序进行水平扩展? 我发现它在内存中维护组件状态和会话,这两者都会影响可扩展性。是否有办法将状态移到数据库或类似Redis的服务中?在阅读了文档后,我没有找到相关内容。如果有人能提供相关参考资料,那将是非常有帮助的。 - Tony

13
以下是 Apache Wicket 的一些特点:

POJO 组件模型

Wicket 中的页面和组件都是真正的 Java 对象,支持封装、继承和事件。

易于开发

由于 Wicket 是 Java 和 HTML 相结合,因此您可以利用自己已经掌握的 Java 或喜欢的 HTML 编辑器来编写 Wicket 应用程序。

关注点分离

Wicket 不会将标记语言与 Java 代码混在一起,并且不会向标记文件中添加任何特殊的语法。HTML 和 Java 的世界是并行的,它们只通过 Wicket ID 进行关联。这些 ID 是 HTML 的属性,也是 Java 组件的属性。由于 Wicket HTML 就是普通的 HTML,Wicket Java 就是普通的 Java,程序员和设计师可以相对独立地工作,而无需依赖任何特殊的工具。

安全性

Wicket 默认是安全的。URL 不会暴露敏感信息,所有组件路径都是相对于会话的。必须采取明确的步骤才能在会话之间共享信息。此外,URL 加密可以实现高度安全的网站。

透明、可扩展的集群支持

所有 Wicket 应用程序都将自动在集群上工作,而无需额外的工作。一旦了解了瓶颈,Wicket 就可以调整页面状态复制。下一个版本的 Wicket 将支持客户端模型,以实现零状态可扩展性。

透明的后退按钮支持

Wicket 支持可配置的页面版本管理。当用户通过浏览器的后退按钮提交表单或跟随链接时,Wicket 能够将页面对象恢复到最初呈现页面时的状态。这意味着您可以编写支持后退按钮的 Web 应用程序,而几乎不需要做任何额外的工作。

多标签页和多窗口支持

Wicket 提供了一种易于编写支持多窗口和多标签使用的应用程序的方式,允许开发人员在用户打开新的浏览器窗口或标签页时正确地进行反应。

可重用的组件

Wicket中的可重用组件特别容易创建。您不仅可以使用Java extends关键字扩展现有组件,还可以创建Panel组件,将一组组件作为可重用单元关联起来。

简单、灵活、本地化的表单验证

在Wicket中编写和使用验证器非常简单。自定义和本地化验证错误消息的显示和内容也很容易。

类型安全会话

通过Wicket,您无需手动管理HttpSession属性。页面和组件对象透明地存储在会话中,应用程序还可以创建带有类型安全属性的自定义会话子类。存储在会话中的所有对象都可以自动参与集群复制。

可定制化的工厂

Wicket非常可扩展。大多数操作都可以通过工厂或工厂方法进行定制。

可分离模型

在Wicket中,模型对象在内存和网络使用方面非常轻量级。当使用模型时,它可以“附加”,从持久性存储中填充自身信息。当模型不再使用时,可以重置瞬态信息,从而减小对象的大小。

边框组件

Wicket边框组件可使页面以可重用的方式进行装饰。这对于继承常见导航结构或布局非常有用。

支持所有基本HTML功能

Wicket支持图像标签、链接、表单和您习惯在Web应用程序开发中使用的其他所有内容。

属性的编程操作

Wicket组件可以编程性地更改任何HTML标记属性。

自动转换

一旦表单验证通过,就可以使用Wicket转换器更新模型。大多数普通转换都是内置的,编写新转换器也很容易。

动态图片

Wicket非常容易使用、共享和生成图像。只需实现一个paint方法即可创建动态图像。

可分页的ListView

Wicket中的ListViews非常强大。您可以在ListView行中嵌套任何类型的组件,甚至包括其他ListViews。PageableListView支持对于大型列表的导航链接。

树组件

用于导航和选择节点的开箱即用的树组件。

本地化

HTML页面、图像和资源字符串都可以进行本地化。


11

Wicket非常出色!

Spring(具有名为Spring MVC的UI模块)似乎是一种超级的“万能型”框架,包括了几乎所有功能,这使得我在开始评估Spring(和Spring MVC)时感到庞大而笨重。如今,Spring对我来说似乎没有专注于任何一个方面。我认为最初它仅仅是一个依赖注入框架,但很快就成为了尝试向所有人提供完整解决方案的巨大框架,失去了简单性。

我读过的有关Spring的书籍中包含的XML配置实例太多。XML配置文件中的错误比Java代码中的错误更难调试和修复,因为您可以通过调试器逐步执行Java代码。

声明Java代码中的内容有什么问题呢?自从谁规定了一切都必须在XML中声明以来,发生了什么?如果您喜欢深陷于复杂的XML配置文件中,那就选择Spring吧。如果您想要完成工作并高效生产,则应选择Wicket。

Wicket非常专注于成为基于Java的Web应用程序开发的最佳UI框架。它不会将您锁定在任何特定的依赖注入框架或任何特定的持久化框架中(您可以使用JDO / JPA,DataNucleus,Hibernate等)。

它的重点显然在于UI,但您可以使用任何喜欢的依赖注入框架(如果您愿意,不必使用Spring的DI)。我们甚至使用自己的依赖注入框架(http://www.expojo.com)与Wicket一起使用,一切都很顺畅。

更新

最近我正在处理一个基于Spring的项目,并需要迅速适应它。我的初步评估中涉及到的关于Spring的所有猜测都是正确的,但还有许多令人惊讶的事情使其比我想象的要糟得多。

在代码中散布着注释时,与未启用“Spring”的同一应用程序相比,基于Spring的应用程序的启动时间至少三倍以上。

在你的代码中单步调试时,如果遍历到Spring AOP中已经"AOPed"的代码行,会是一场噩梦。这似乎会将其触手伸入几乎每个类中。看起来应该是单步进入你的代码行,却变成了37级深度的AOPed Spring框架代码的超级跳转。

几乎所有东西都会发生这种情况-尤其是任何ORM(例如Hibernate/JPA、DataNucleus/JPA)相关方法。如果你想知道为什么使用Spring/Hibernate比非AOPed ORM调用(如DataNucleus)运行得更慢,那么这37层的“隐式”AOPed调用就应该给你一些提示……

哦,还有可能产生“gotchas”的潜力。尝试在Spring事务注释上使用'synchronized',看看它实际上有多少'synchronized'!可怕!

我理解Spring的流行(虽然近来似乎有所减弱):因为很多人不思考,只是盲目使用技术,因为他们认为其他人都在使用它所以它肯定很棒。这从来不是一个好的假设-记得EJB吗?(史上最糟糕的技术,但当时每份工作广告都需要EJB“技能”)


11

Spring 不仅仅是 Spring MVC。你可以(而且可能应该)将 Spring 和 Wicket 一起使用。


9

Spring比Wicket更全面。

Wicket是一个Java Web UI框架。Spring也有一个类似的框架,还带有持久化、远程调用、安全、消息等模块。

Spring基于依赖注入和AOP构建,而Wicket没有。

虽然我没有使用过它,但据说它很简单。我无法确定Spring是否更容易或更难。

除了Web应用程序之外,您还可以在许多其他情况下有效地使用Spring。


4
春(Spring)基于依赖注入和面向切面编程(AOP),Wicket则没有这两个功能。值得一提的是,并没有任何阻止你在使用Wicket时,同时使用Spring框架中除了Spring MVC以外的任何模块,或者使用任何依赖注入、面向切面编程的其他框架。 - whaley
很好的观点,Whaley。我同意。这将包括Guice或PicoContainer、AspectJ等。 - duffymo

7
您可以在《Wicket In Action》的免费第一章中阅读有关使用Wicket的优点:http://www.manning.com/dashorst/ 简而言之,当您开发的应用程序相对复杂,希望其易于维护、能够扩展团队并利用重用时,Wicket是一个很好的框架。面向对象编程被证明是编程UI的非常有用的范例,但不幸的是,包括Spring MVC在内的大多数Java Web应用程序开发框架只支持非常过程化的编程模型,其中它们标记了MVC以使其听起来很酷(但实际上,由于它们支持的粒度是请求/响应往返而不是自包含小部件,因此MVC实际上是具有误导性的)。
Spring的DI部分非常出色,您可以轻松地与Wicket一起使用。

5
我同意到目前为止提供的答案。以下几点是Wicket应用程序开发方法的结果,重点集中在Java代码方面:
- Wicket开发不涉及编写JSP。 - 可以开发AJAX组件,而无需编写Javascript。
我还没有遇到过其他采用这种以Java为中心的框架。我使用过的所有其他框架(如Struts、Spring)都涉及JSP开发。
对我来说,Wicket的一个很大的优势是它专注于Java,并且拥有像Eclipse这样的丰富的开发环境工具。此外,业务逻辑与应用程序的呈现方面之间的分离非常干净。

4

4
Spring仅在页面级别提供MVC设计模式——粗粒度的级别。相比之下,Wicket在单个组件级别上提供MVC设计模式(就像Swing为Fat Client编程所提供的一样)。使用Spring MVC,表单的所有数据都是全局的,在整个前端servlet中没有太多机会进行信息隐藏、松散耦合或紧密凝聚。而Wicket使得显示逻辑更加模块化——由ComponentA管理的数据不需要对于ComponentB的代码可见。
更小的粒度使得在许多不同的网页甚至跨越网络应用程序重复使用显示代码变得更加容易。
此外,因为组件配置是使用Java而不是XML完成的,它们可以在运行时即时配置,这使得其比大多数其他组件导向的框架(如ASP.NET Web Forms或Java Server Faces)拥有更大的强大和灵活性。

2
Wicket相对于其他流行的Java Web框架的另一个优点是它允许您创建模块化和可扩展的Web应用程序。这在设计基于Web的产品时特别有用,您可以在部署时通过添加插件形式的额外功能和页面来扩展产品,从而消除对产品核心功能/源代码的影响。这里有一篇非常好的文章介绍了这个特性:http://www.infoq.com/articles/modular-wicket

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