6

我们正在尝试为 Web 应用程序的客户端开发选择一个框架。这些是我们应用程序的关键点。

1) 用户在客户端执行许多活动的富文本应用程序。

2) 我们正在寻求使用 Java 技术进行开发

3) 服务将在云端提供。

4) 需要移动支持。

5) 可扩展性也是一个主要问题。

我在网上浏览了很多文档和信息以及这段视频http://twit.tv/show/floss-weekly/187,现在已经离开了Vaadin普通的 GWT。我在 GWT 开发方面有一点经验,但在 Vaadin 中没有(我只在 Vaadin 中编写了几个示例程序)。请帮助我理解一些事情。

1) 如果我必须在 Vaadin 中编写一个新的小部件,完成它的难易程度如何?

2) Vaadin 小部件或概念是否有任何明显的问题,可能会阻碍任何应用程序?

3) 如果明天我们决定切换回 GWT,考虑到 Vaadin 与所有服务器代码逻辑一起工作,这是否可行?

4) Vaadin 每次都访问服务器的方法是否会影响部署在云上的应用程序?

5)最后但最重要的是,论坛支持和未来的开发如何?

非常感谢。请注意,我已经浏览了许多关于这些讨论的文章和链接,但我很高兴能从一个至少在一段时间内对这些东西有实际经验的人那里知道。再次感谢。

4

4 回答 4

2

我认为你应该根据每个架构做出这个决定,因为这是它们最大的不同点。

Vaadin 遵循半对象模式,因此更类似于 Eclipse RAP(和 ZK)而不是 GWT。你基本上有一个服务器应用程序,你可以从浏览器控制它。想想一个简单的 Button,它的状态是在服务器上保持,在浏览器中你会看到它的表示。每次 Button 的状态发生变化时,它都必须与服务器通信以更新其状态。因此,对于您拥有的每个小部件都是如此。

我必须说我对 Vaadin 或 RAP 没有太多经验,但想象一下,当您有许多小部件和许多同时使用它们的用户时,您的服务器将不得不处理多少种状态。这在云中可能不是一个大问题,但可能在资源有限的传统服务器上。

也就是说,您可以想象这种方法也不是很适合移动设备。每次状态更改都会导致服务器往返,但在移动设备上,您的连接可能很差,甚至根本没有连接。在这里,我显然更喜欢普通的 GWT,因为它可以完全在浏览器中运行并且也可以“离线”使用。

你的另一个问题是关于小部件的。的确,GWT 没有提供像 Vaadin 那么多的小部件,但是有很好的小部件库可以补充现有的 GWT 小部件。问题是,您不能从 Vaadin 开始,然后决定切换回 GWT,因为用 Vaadin 编写的小部件不能在普通 GWT 中使用。但反过来说,GWT 小部件和自写小部件可在 Vaadin 中使用。

我建议从普通的 GWT 开始,用 UiBinder 编写自己的小部件,这非常容易。如果您想使用一些更复杂的小部件,请查看像GWT-BootstrapSencha GXT这样的小部件库,它们与普通 GWT 配合得非常好。

于 2013-05-30T07:40:36.990 回答
2

GWT

现在留下了 Vaadin 和普通的 GWT。

Vaadin 7 和 Vaadin 8,现在称为Vaadin Framework,都是基于 Java 的Google Web Toolkit (GWT)包装器。

您为业务逻辑和 UI 创建编写纯 Java 代码。此 Java 代码在Java Servlet Web 容器中的服务器端 JVM 中运行。当 Vaadin 使用 GWT 自动生成必要的 HTML、CSS、JavaScript、DOM、AJAX、XML 和 JSON、WebSocket 以及在用户的客户端 Web 浏览器中呈现 Web 应用程序的用户界面所需的推送代码时,奇迹就会发生.

因此,服务器端是纯 Java,客户端是纯 Web 标准技术(客户端没有 Java)。

网页组件

Vaadin 10,现在称为Vaadin Flow ,用新兴的Web 组件标准技术取代了 GWT 的内部使用。新一代是对 Vaadin 的重大改写,尽管它的目的和它的许多概念(如数据绑定)保持不变。

通过利用 Web Components 技术,应该更容易构建 Vaadin 小部件。并且使现有的基于 JavaScript 的组件(不是为 Vaadin 明确设计的)可用于您的服务器端 Java 代码应该相对容易。这就是 Web Components 的重点:制作可跨各种 Web 框架工具工作的基于 Web 的小部件。

虽然 Vaadin Ltd 对发布 Vaadin 10 Flow 感到非常兴奋和自豪,但他们仍然致力于 Vaadin 8 框架。Vaadin 8 正在积极开发中,并制定了至少到 2022 年继续提供支持的路线图计划。

  • 如果您真的想使用 GWT,可以在 Vaadin 8 框架中进行。
  • 如果您想押注 Web Components 而不是 GWT,请选择 Vaadin 10 Flow。

丰富的应用

用户在客户端执行许多活动的富文本应用程序。

如果您指的是字体、颜色等中的“富文本”,您应该研究与 Vaadin 8 捆绑RichTextArea的小部件,并查看Vaadin 目录以获取其他附加组件。该小部件不会被引入 Vaadin 10 Flow,但如上所述,Web 组件的使用可能会使其他现有的此类工具可用于基于 Java 的 Vaadin 应用程序。我看到一个已经在 beta 中了

如果您指的是具有企业级可靠性的专业外观、面向业务、桌面风格的 Web 应用程序的“丰富”,这正是 Vaadin 的目的。

爪哇

我们正在寻求使用 Java 技术进行开发

这就是 Vaadin 存在的理由:编写纯 Java 以利用 Java 工具和库的庞大生态系统,以及其在安全性、性能和可靠性方面的所有优势——同时使用 Web 标准技术进行自动渲染您的应用程序在网络浏览器中。

移动的

需要移动支持。

Vaadin 小部件集合已经发展为支持触摸表面手势。

Vaadin Ltd 公司以前提供了一个特殊的移动支持包,称为Vaadin Touch。常规 Vaadin 小部件中对触摸手势的内置支持使该包过时且不必要。

云和扩展

这些服务将在云中提供。

可扩展性也是一个主要问题。

您基于 Java 的 Vaadin 应用程序确实存在于服务器端的 JVM 中。每个当前用户都由会话对象表示。出现在浏览器中的所有用户界面小部件在服务器上的 Java 对象中都有对应物。您可能会在服务器上的其他 Java 对象中保留更多数据和功能。您也可能从该服务器端调用 JDBC 或 Web 服务等。

所以所有这些都会占用服务器上的内存和 CPU 周期。您确实需要意识到您的编程会进行缓存并将其他负担放在服务器上。用户之间共享的任何资源都必须是线程安全的,因为 Java Servlet 环境在设计上是多线程的。

根据您的应用程序的具体情况,可能需要强大的服务器硬件(内存、内核)。或者,如果你真的有一个非常大的应用程序和非常多的用户,你可能需要多个具有粘性会话负载平衡的服务器。

Vaadin Ltd 公司模拟了支持数千个同时用户会话的 Vaadin 应用程序的使用。您可以联系他们就您的具体情况进行咨询。

虽然可扩展性是一个需要考虑的问题,但不要妄下结论。想清楚,做一些实验。

创建自定义小部件

如果我必须在 Vaadin 中编写一个新的小部件,实现起来有多容易或多难?

在 Vaadin 8 中,您确实可以创建自己的小部件。但这样做需要学习 GWT 的使用。可行,正如您从Vaadin Directory中数百个已发布的附加组件中看到的那样。但仍有一些严肃的工作。Vaadin Ltd. 提供了这方面的培训。

在 Vaadin 10 Flow 中,使用 Web 组件应该可以更轻松地创建您自己的小部件。查看这个免费提供的入门项目,让您继续前进。请参阅教程,使用 Element API 创建一个简单的组件。在 Vaadin 10 Flow 中创建小部件的关键概念:

  • 每个 Vaadin 10 组件始终映射到服务器端DOM表示中的一个根元素。
  • ElementAPI 使从服务器端轻松修改DOM成为可能。

还有其他问题吗?

Vaadin 小部件或概念是否有任何明显的问题,可能会阻碍任何应用程序?

不知道你在这里的意思。我建议通读优秀的 Vaadin 教程和手册。它会引导您使用 Vaadin 中的各种功能。

在为桌面应用程序使用过其他快速应用程序开发环境之后,Vaadin 对我来说总是有意义的,适合我的思维方式和做事方式。

出血边缘

对于 Vaadin Flow,要知道 Web 组件仍然是新事物,而且有些前沿。Web 组件实际上是技术的集合。并非所有浏览器制造商都完全支持所有这些。所以一些polyfills仍然是必要的。

Vaadin Flow 还利用了最终出现在 CSS 中的一对现代页面布局功能 FlexboxGrid Layout

只有最新版本的浏览器才能对所有这些功能提供良好的支持。有关详细信息,请参阅CanIUse.com

Vaadin 的部分目的是掩盖各种浏览器的不同版本之间的差距,以隔离我们使用 Vaadin 的开发人员。因此,您可能不会在某些浏览器中遇到问题,但您可能会再次遇到问题。

此外,Vaadin Flow 并不完全具备 Vaadin 8 的所有功能。有些正在开发中,有些正在计划中。

结果:如果您渴望尽快发布并且不能坚持让用户更新到最新的浏览器,请使用 Vaadin 8 而不是 Flow。

离开 Vaadin 前往 GWT

如果明天我们决定只切换回 GWT,考虑到 Vaadin 与所有服务器代码逻辑一起工作,这是否可行?

如果您想使用 GWT,并且想用 Java 编写服务器端逻辑,那么 Vaadin 8 Framework 是您的完美工具。我看不出你会怎么想离开 Vaadin。

但是,如果您确实离开了 Vaadin,您将不再拥有将浏览器中的 GWT 与服务器上的 Java 代码连接起来的粘合剂。这种胶水就是 Vaadin 为您提供的。当然,您可以编写您的 Java 后端业务逻辑以直接不了解 Vaadin。事实上,Vaadin Ltd 正是为此目的提供了一个基于 Maven 的多模块原型。该模块包含您的业务逻辑和数据库访问(等)代码,与包含您的面向 Vaadin 的代码backend的模块分开。ui

网络流量

每次都访问服务器的 Vaadin 方法是否会影响部署在云上的应用程序?

您将需要进行一些试验和分析,以查看特定应用程序所需的内存和内核。如上所述,Vaadin 对服务器资源的要求可能很高。

但从技术上讲,云部署没有技巧或技术限制。只是在JVM中运行的普通 Java 代码。任何可以运行Java Servlet Web 容器的东西,例如TomcatJettyGlassfish / Payara、WildFly/JBoss 等都可以运行您的 Vaadin 应用程序。

如果您担心网络流量,是的,有流量。当用户使用小部件(例如单击按钮或在字段中输入数据)时,会通知您的服务器端 Java 应用程序,以便您的应用程序可以响应业务逻辑。所以这意味着频繁的网络遍历。

您确实可以选择在不需要时不立即通知服务器端。这样做,您正在控制一些流量。例如,您可以选择是否希望在在字段中输入文本时通知服务器端(并做出反应),或者偶尔在击键之间暂停,或者仅在用户完成输入之后场地。请参阅手册中的 [配置值更改事件的粒度]( https://vaadin.com/docs/v8/framework/components/components-textfield.html部分。

当我开始使用 Vaadin 时,我确实担心 Internet 性能出现问题。但我可以说,以我自己的经验,我很惊喜,真的很震惊,发现这对我来说不是问题。例如,在美国,在威斯康星州的科罗拉多州,只有一台 Mac mini 在非常快速的互联网连接上运行 Vaadin 7 或 8 应用程序,几乎可以立即对访问西雅图、佛罗里达州和加拿大的家庭 DSL 和有线电视连接的客户做出反应. 从香港访问时,只有最轻微的延迟,在数据输入应用程序中通常是难以察觉的。

当然,您的里程可能会有所不同。我上面的例子是一台专用计算机。相比之下,云提供商因 CPU 可用性和网络延迟或延迟的波动而臭名昭著。

支持

最后但最重要的是,论坛支持和未来的开发如何?

Vaadin Ltd似乎是一家非常健康的开源公司。他们销售附加产品、支持、咨询和培训。该公司一直在发展,雇佣更多员工,并在海外设立办事处(美国、德国),而他们的总部仍在芬兰(图尔库、赫尔辛基)。

各种 Vaadin 产品正处于非常繁重的开发阶段,其中包含许多增量版本、预发布版本以及即将推出的长期支持版本。定期发布其发展计划的路线图。他们还在博客中定期更新业务和技术问题。

Vaadin Ltd 公司拥有一个非常活跃的论坛站点。他们的员工和其他用户也都积极使用 Stack Overflow。

于 2018-07-06T20:41:04.473 回答
1

如果您想要未来的开发人员,请诚实地选择 jsf。这不是最好的选择,但你至少会容易受到垂死的框架的影响。

在我们的项目中,我必须使用 Vaadin,我不会这样决定。我更喜欢 ZK ( http://www.zkoss.org/ ) 或 GWT。

关于你的问题,尽我所能回答。

  1. 比较容易,比如Swing。你扩展 CustomComponent 就可以了。
  2. 表现。我们在编程时遇到性能问题和问题。由于 VAADIN 规范,该架构不得不多次重新考虑。与 JPA 结合,对我来说,与之合作并不愉快。
  3. 很难说。当然,您到处阅读有关 MVC、松散耦合等的信息。但我个人认为,您的 GUI 框架总是有一些根源影响下面的一些代码。您不能简单地将框架更改为即插即用。我不知道细节,但可能生命周期已经与其他框架不同。因此,与数据库通信的 Vaadin 的实现,例如,当使用 FormFactory 时,将影响您的持久层,在使用另一个框架时您必须调整它。仅仅因为实施了战略。
  4. 我在这里没有经验。
  5. Vaadin 在社区中很重要,而且似乎有很多人使用它。我体验到 Vaadin 团队在传播框架方面付出了巨大的努力,并且会回答问题并尽其所能帮助您。我很感激。文档真的很好。

我个人认为你必须深入思考这个框架,以及它是否符合你的需求。在选择大型框架之前,请考虑一下,如果您想 - 服务器端编程(ZK,Vaadin,) - 服务器和客户端(GWT) - 使用标记语言和逻辑(JSF)

您的环境设置是什么,例如应用程序服务器、数据库等?

即使 Vaadin 是一个很好的产品,如果我可以自由选择,我也不会使用它。

再见

于 2013-04-08T12:12:30.630 回答
0

最好选择 HTML、Javascript 等客户端技术或 ReactJS、Angular 等更高级的 UI 框架,而不是服务器端技术。服务器端框架的性能很慢,并且很难针对浏览器问题进行调试。

于 2019-08-23T18:06:14.200 回答