Wicket与Vaadin的比较

48
我对Wicket和Vaadin之间感到犹豫。我正在开发微型独立软件公司,并需要选择Web框架。我的选择已经缩小到了Wicket和Vaadin。我已经使用过这两个框架并且非常喜欢它们。然而,我需要做出一个选择。
如果我选择Vaadin:
  1. 我不必太担心外观。它有很好的主题。
  2. 我将会完全使用Java进行编程,这是我非常擅长的,而不必花时间在我不太擅长的CSS上。
  3. 我需要的大多数业务应用程序组件都已经“开箱即用”,包括桌面样式布局、工具提示、带有可拖动和可折叠列的表格等。
但是,如果我选择Vaadin:
  1. 我将失去声明式创建UI的能力。
  2. 如果浏览器不支持JavaScript(例如大多数非WebKit移动浏览器),我将无法回退。
  3. Vaadin公司正在销售一些组件(例如JPAContainer),因此我不确定该公司是否致力于提供完全开源的框架。商业利益始终排在首位。
  4. Vaadin应用程序大多适用于Intranet。它们不太适合具有Web外观和感觉的Internet。
如果我选择Wicket:
  1. 我将不得不为我的应用程序设置样式,几乎无法给它们提供桌面外观和感觉。
请问有什么建议吗?有经验的任何人都可以告诉我这两个框架的优缺点以及您做出决定的原因。

2
只是一条评论:我经常使用Vaadin并且仅使用声明式UI …… 所以第一点不正确。 - Magnus
8个回答

33
我想我已经为这两个框架投入了一些时间。我真的很喜欢它们,因为它们将Swing编码带到了Web开发中。对于我来说,没有更容易的选择(虽然有click,但我不喜欢速度模板)。
是的,它们有差异。

我不必太担心外观和感觉。它带有漂亮的主题

是的,但每个严肃的公司都会以不同的方式设计其应用程序(除非您正在原型设计)。

我将在Java中完成所有编程,这是我非常擅长的,而不必花时间去破解我不太擅长的CSS

那么Vaadin会比较“好”。

我将失去声明式创建UI的能力。

那有什么优点呢? (顺便说一句:您可以使用groovy进行声明性编码;-))
但好吧。 我知道你的意思:如果你能负担得起几个单独的设计师,那么wicket会更好。

我几乎无法给它们桌面外观和感觉。

为什么不能?或者你在这里指什么?Wicket支持ajax,有些组件支持漂亮的“桌面外观”(ajaxlink,lazycomponent,autocompletion,progressbar,请参见wicket stuff + extensions)。 好吧,对于任何更复杂的组件,您都必须使用javascript进行编码,但是顺便说一句,您是否知道您甚至可以在wicket中使用GWT
一些小经验:
Vaadin在编码时肯定更快(没有css、html的东西)。但是如果你要投入生产,需要注意编程的便利性可能会以客户端性能为代价:例如,如果您使用“错误”的布局,如Horizontal/VerticalLayout,...大量使用javascript可能会减慢旧浏览器的速度。
但是Vaadin并不慢!使用适当的布局,如CssLayout或FastLayout,即使旧浏览器也可以使用它。(尽管如果您使用CssLayout,您的编码风格真的很像wicket。)
Vaadin的一个问题是有点难以进行分析,因为您不容易看到客户端需要所有CPU的位置,而嵌套的div名称变得神秘。
Wicket的一个伟大之处在于其warp persist integration
(Guice可以集成到Vaadin和Wicket中)
使用Vaadin应该很容易测试UI(尽管我没有找到单元测试的东西),而使用wicket非常容易。
最后但并非最不重要的是,在Vaadin中创建列表/表格与wicket相比非常容易。

1
感谢您的详细回复。最终我选择了使用Vaadin开始这个项目。这是因为它帮助我用更少的精力创建一个相对好看、功能丰富的应用程序。虽然我对Wicket有更好的经验,但我总是发现自己花费数小时在非核心事项上,比如布局、UI颜色等等。我希望应用程序具有完整的桌面外观和感觉,而不是页面之类的东西。虽然使用Wicket也可以实现这一点,但我发现大多数事情都更容易使用Vaadin完成。我将在公共面向网站的部分中使用Wicket。 - joshua
10
针对上面的评论进行跟进:我后来转用了Wicket框架,自那以后就再也没有回头过。我遇到了Vaadin用户界面布局的问题。 - joshua
谢谢您的更新。您具体遇到了什么问题?我最初遇到的问题是性能方面的(我只能说大约在2010年4月)。 - Karussell
2
已经有一段时间了,所以我记不清楚了。我有面板,其中包括表单视图、表格视图和组合视图(表单在表格上方)。我创建了按钮来切换视图。尽管按照教程的说明操作,但它的行为是不可预测的。有时转换需要太长时间。我决定编写自己的HTML是做基于浏览器的应用程序的最佳方式。因此,我又回到了Wicket。使用Wicket时,我从未被困住过。 - joshua
1
尝试使用ExtJS JavaScript框架,可以为桌面应用程序带来非常棒的体验。 - Lawrence

12

我非常熟悉Wicket,但是我没有使用Vaadin的经验,所以这可能会有(一点)偏见。

我会出于明显的原因推荐Wicket,但对你来说最有趣的可能是Wicket的开放性。正如Gweebz所指出的那样,Wicket使用基本的HTML标记作为其基础,因此任何结构或外观上的更改通常都很容易实现。

就我个人而言,我非常喜欢我们在Wicket工作中前端展示和数据后端之间的流程,我们实现了Spring和JPA / Hibernate,这意味着任何前端中的更改都可以通过Wicket基于模型的架构的一行代码转换回数据库。

再次声明,我没有使用过Vaadin,但如果你正在寻找要开始使用的架构,我还建议你看看GWT。


2
免责声明:我是Vaadin团队的成员,对Wicket了解不够,请纠正我如果我有任何错误。据我所知,Wicket的编程模型与Vaadin相比非常相似。Spring、JPA等后端内容都可以轻松使用。我不知道Wicket是如何支持这些内容的,但Vaadin包括各种集成它们的方式,例如JPAContainer。此外,请查看即将推出的Vaadin Spring Roo插件。请参阅下面我的评论的其余部分。 - hezamu
8
"...JPA等后端技术都可以很方便地使用。我不知道Wicket是如何支持它们的,但是Vaadin包括了多种集成方式,例如JPAContainer。让我感到失望的是,JPAContainer在商业使用时需要购买许可证,这个组件是由同样制作Vaadin的人提供的。难道不是你们的目标让框架尽可能好而完整吗?还是说你们的目标是让框架足够好用以吸引开发者,同时又缺少某些组件使得开发者需要花钱购买一些组件?" - joshua

10

(继第一篇与Wicket相关的答案的评论)

Vaadin和Wicket之间的主要区别在于UI组合和客户端代码的编写方式。使用Vaadin时,通常不使用任何模板或HTML来组合您的UI,并且可以直接得到一个流畅、完全Ajax化的UI。但是,如果您喜欢模板方法,请使用CustomLayout,它正好做到了这一点。

很少需要客户端编码,但是当需要时,您可以使用基于Java的GWT进行编码,这在我看来比手写Javascript好多了。此外,使用GWT可以自动获得跨浏览器兼容的解决方案,而无需自行处理这些问题。

比较框架时,还应该查看社区活动和文档。使用Vaadin时这两者都非常优秀。另外,请注意Vaadin目录,其中目前包含100多个非常有用的UI组件和其他插件。


8
在提到Vaadin时,可能需要提及您是IT Mill(Vaadin背后的公司)的员工。 :) - Jonik

8

我对两种框架的经验有限,但我更喜欢Vaadin。它允许我为正在开发的Web应用程序提供更丰富的体验。然而,最主要的好处是我们可以轻松编写围绕UI类的单元测试,确保组件在与预期方式交互时功能正确。虽然Wicket也可以做到这一点,但根据我的经验,它会更加困难。

我还要提到的是,任何一个框架都需要一些样式设计。Wicket从普通的HTML开始,而Vaadin默认使用MacOSX样式主题,但几乎任何Web应用程序都需要至少一些自定义。考虑到这一点,在Wicket应用程序中自定义CSS要比Vaadin容易得多,因为你控制了标记。Vaadin将标记隐藏起来,并生成具有奇怪ID和结构的元素,因此更难以自定义外观。在作出决定时,请记住这一点。


1
这是一个公正的比较,尽管我认为使用Vaadin相对简单地为组件设置样式:https://dev59.com/wk3Sa4cB1Zd3GeqPx8Sj - Karussell
1
Wicket默认生成具有不可预测数字ID的组件。但是,如果您愿意,可以显式设置它们。我看到很多人抱怨使用Selenium和Wicket一起工作,因为ID是不可预测的。 - Ethan Hohensee

5

我目前正在使用Wicket进行开发,之前也用过Vaadin。以下是我的观察:

  • Vaadin虽然可以免费使用,但在我看来并不像宣传的那么美好。如果你需要支持、帮助、文档来解决一些麻烦和棘手的问题,那么你会很困难,因为与Apache Wicket相比,Vaadin的文档/社区并不是那么好。Vaadin有专门的人员提供帮助,但你需要付费。
  • 使用wicket编程需要具备较强的编程能力。Vaadin也需要良好的Java知识,但如果你愿意,你可以轻松地写出一些混乱的代码(只是说说而已,不要真的这样做);
  • Apache Wicket真正将web技术(Javascript、HTML等)与框架技术(Java)分离。Vaadin也试图这样做,但在我看来并不是那么优雅和透明。

除此之外,我们谈论的是两种不同类型的框架,两种不同的方法,它们都有优点和缺点,我建议您搜索和比较,看看哪种更适合您的需求。

编辑:关于外观,例如你总是可以使用Wicket Bootstrap


4

请注意,虽然Vaadin基础框架是免费的,但如果需要一些额外的功能,您可能需要购买扩展。

例如,如果您需要集成一个好的图表解决方案,如Highcharts,您需要支付并购买Vaadin Charts扩展(即使Highcharts可用于FOSS应用程序免费,建立在其上的Vaadin Charts插件也不会为FOSS应用程序提供免费服务)。


1
确实如此。但是Wicket也会发生同样的情况:如果您想要一个功能强大的图表解决方案,以实现客户端美观性和用户交互,那么您也必须为像Highcharts这样的良好图表解决方案付费。您始终可以应对服务器端解决方案,例如JFreeChart,它将呈现图表为png并在UI中加载它(我在Wicket中使用过它,效果非常好)。您始终可以创建自己的小部件来与图表进行交互。 - Cavaleiro
1
真的,但是Wicket的Highcharts是免费的,而Vaadin的Highcharts需要购买(即使项目是FOSS)。 - Ishan Thilina Somasiri
1
我不确定它是否适用于商业用途。 - Cavaleiro

1
感谢您的提问。 答案简短明了。
Vaadin是一款适用于Java开发人员开发Web应用程序的强大工具。如果您掌握了中等水平的JavaScript知识和一些基本的CSS技能,它甚至可以成为一个强大的WAR机器。
Vaadin不慢,它甚至比React和Angular更快。如果您的应用程序运行缓慢,那是因为您设计得不好,这对您使用的任何框架都是正确的。请记住,Vaadin使用Web组件,因此大部分UI都是在客户端构建的,没有重量级的服务器渲染。
对于您的情况,您说您没有CSS知识,有两个选择: 使用Vaadin,或者雇用前端开发人员。
作为一名超过10年的Web开发人员,我曾经是PHP开发人员和JavaScript开发人员。我可以告诉您,一旦我接触了Vaadin,我就无法以其他方式进行开发。

0

选择哪个取决于业务需求(请参见您问题的第2点和第4点)

However, if I go the Vaadin way:

I will loose the ability to create UI declaratively.
你可以尝试使用ZK框架 - 它类似于Vaadin,具有基于XML的声明式用户界面。

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