vaadin

您可能知道,Vaadin是Java上最受欢迎的Web框架之一:

  • https://zeroturnaround.com/rebellabs/java-web-frameworks-index-by-rebellabs/
  • https://javapipe.com/hosting/blog/best-java-web-frameworks/

最近发布了此Web UI开发框架的新版本– Vaadin 10。

创作者称Vaadin Flow为现代Web应用程序和网站开发的新Java Web框架(我在这里不太相信它们)。 它是Vaadin平台的一部分,该平台替代了另一个产品– Vaadin Framework,它可以使用Java上的Web组件标准来开发Web应用程序(更准确地说是Web UI)。

在这一点上,所有这些东西,包括Vaadin Bla Bla,框架,平台等等,都必须混在读者的脑海中。 这是怎么回事?

我们已经将Vaadin用作UI Back-office系统的CUBA平台的一部分,并且在此期间已经积累了很多工作经验,这就是为什么我们不禁担心其命运的原因。 在下面,您会发现我对Vaadin 10的推测。

Vaadin框架

Vaadin是一家芬兰公司,创建UI开发工具和库。 同样,他们创建了一个同名的Java Web开发框架。

Vaadin Framework是具有服务器端编程模型的UI框架,其中所有UI逻辑及其状态都存在于服务器上,并且Web浏览器仅执行UI小部件的代码。 实际上,这是一种瘦客户端技术,其中浏览器仅反映服务器命令的内容,所有事件都发送到服务器。

服务器端方法使我们忘记了开发是针对Web设计的,而是将UI开发为可直接访问服务器上的数据和服务的桌面Java应用程序。 同时,Vaadin将同时处理浏览器中的UI反射和浏览器与服务器之间的AJAX交互。 Vaadin引擎在浏览器中提供应用程序服务器端用户界面呈现,并封装客户端和服务器之间交换的所有详细信息。

这种方法有很多优点:

  • Java代码更易于编写和调试
  • 您可以使用众所周知的Java库和工具(IDE,编译器,测试)
  • 不必开发和公开Web服务
  • 解决方案更安全

缺点:

  • UI表示需要服务器上的大量内存
  • 扩展解决方案比较困难
  • 开发小部件时,您需要开发Java API

由于这些优点和缺点,Vaadin FW牢固地固定在可预测负载的企业开发中,并且开发速度和简便性比硬件和内存的成本更为重要。

Google Web Toolkit发生了什么

在Vaadin一直为广大受众所熟悉的时候,Vaadin FW的客户端始终与另一种著名产品Google Web Toolkit(GWT)紧密相连。 通过这种串联,用户可以使用相同的语言-Java,来为它们编写UI组件和服务器API。

过去几年,Google Web Toolkit并没有发展壮大,自2015年以来,我们一直在等待GWT上宣布的GWT 3.0 / J2CL.Create 2015:

  • https://www.youtube.com/watch?v=XJYNCohpxU0
  • https://groups.google.com/forum/#!topic/google-web-toolkit-contributors/s_kX17Xs1S4
  • https://groups.google.com/forum/#!topic/Google-Web-Toolkit-Contributors/9Zi4-C5gpxQ

在这个停滞时期(2015-2017年),发生了一个重要事件:新的Web组件规范和Google – Polymer的另一个Web框架出现了。 显然,这是GWT终结的开始。

应该提到的是,GWT 3是作为内部Google框架开发的,其开发仍保留在公司内部。 因此,社区无法以任何方式影响该过程,或者至少看不到该过程正在进行。

提到这种停滞,Vaadin团队做出了一个艰难的决定 ,即完全放弃GWT的开发,并重写其框架的客户端。 这些变化不会被忽视,并且使已经在Vaadin上发展的每个人都感到恐惧。

Web组件

Web组件是一组标准。 它是由Google提供并积极推广的,但该计划已在Mozilla中得到支持。 实际上,这些是用于创建Web UI组件的技术,以便它们可以支持行为和表示形式封装。 主要优势是可重用性。

参见https://www.webcomponents.org

基本概念:

  • 自定义元素–用于创建自己HTML元素的API
  • Shadow DOM – HTML组件封装的工具,其可视化表示与全局CSS规则隔离。 一言以蔽之,您可以制作一个组件,例如订单表单,并且不必担心表单样式会因为页面的全局CSS规则而被破坏。
  • HTML模板–在HTML文档中放置包含DOM草稿元素的被动块的机会。 此类块由浏览器解析,但不呈现,也不执行其代码。 建议将它们用作数据渲染的模板。
  • HTML导入–一种特殊语法,用于将所有HTML文档作为具有其所有布局,样式和JavaScript代码的模块导入。

例如,如果我们查看YouTube DOM树,就会注意到“自定义元素”和“影子DOM”的用法:

所有这些使您能够编写现代的Web UI组件。

在这里,我应该承认,浏览器的支持还远远不够完美,例如,您仍然需要使用polyfills来处理Edge。

聚合物

Polymer是一个超出Web组件标准的很小的库,旨在简化其用法。 例:

// Import corresponding components
import '@polymer/paper-checkbox/paper-checkbox.js';
import {PolymerElement, html} from '@polymer/polymer';// Determine new class
class LikeableElement extends PolymerElement {// Here will be the component’s public featuresstatic get properties() { return { liked: Boolean }}// That’s how the DOM tree will look inside, CSS influences only the component itselfstatic get template() {return html`<style>.response { margin-top: 10px; } </style><paper-checkbox checked="{{liked}}">I like web components.</paper-checkbox><div hidden$="[[!liked]]" class="response">Web components like you, too.</div>`;}
}

参见https://www.polymer-project.org/

实际上,Polymer可以完成以前由GWT完成的所有工作,但与此同时,它可以与任何JS组件以及其他框架(如React和Angular)兼容。

Vaadin成分

让我们回到Vaadin。 一段时间以来,Vaadin公司一直在开发一种名为Vaadin Components的产品-用于前端开发人员的UI组件,可以将其集成到任何JS应用程序中。

这些组件基于Web组件和Polymer!

正如我们现在所看到的,这是Vaadin Framework的备份计划,该计划帮助放弃了Google Web Toolkit,并开发了一个没有任何组件的新框架。 解决了鸡肉和鸡蛋的问题,Vaadin组件成为即将到来的Vaadin 10的前端。

Vaadin流

Vaadin 8包括UI状态同步机制和双向RPC协议(远程过程调用)支持。 只能由于GWT才有可能,因为服务器和客户端类的共享接口是用Java编写的。

通过放弃GWT,有必要实现一种新的机制,该机制将能够与JS前端和Java后端透明地集成。 Vaadin Flow发挥了这种机制的作用(很长一段时间以来,该名称也被称为Vaadin 10)。

Flow的文档中有以下方案: https : //vaadin.com/docs/v10/flow/introduction/introduction-overview.html

其要点是:

  • 支持服务器到客户端的UI状态同步
  • 服务器端可以订阅UI组件事件,并执行该AJAX查询
  • 业务逻辑在服务器上执行,Web浏览器仅加载UI中反映的数据
  • 服务器端使用Java
  • 客户端可以使用HTML,CSS,JS和Polymer模板

对我来说,这意味着Vaadin将拥有更多的前端技术,而Java远远不够(对于Vaadin 8,您只需要Java,而HTML / CSS则不是必需的)。 另一方面,现在可以进行简单的JS代码集成。

请参阅文档中的完整功能列表: https : //vaadin.com/docs/v10/flow/Overview.html

Vaadin平台

Vaadin 10的每个组件都是按照JS世界的最佳传统分别开发的-微型模块,彼此之间具有最大的独立性。 同时,组件的客户端部分以WebJARs格式打包在JAR中。

这有点令人恐惧,尤其是当您查看最小的项目关系时:

2为了以某种方式管理这种混乱,出现了BOM表(物料清单)项目,称为Vaadin平台 。

这不是一个自包含的产品,而只是以Maven BOM格式制作的一系列兼容组件和工具版本:
https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

它通过以下方式连接到Maven: https : //vaadin.com/docs/v10/flow/components/tutorial-flow-components-setup.html

<dependencyManagement><dependencies><dependency><groupId>com.vaadin</groupId><artifactId>vaadin-bom</artifactId><version>${vaadin.platform.version}</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>

从Vaadin FW 8迁移

此文档介绍了Vaadin 8的迁移选项:

https://vaadin.com/docs/v10/flow/migration/1-migrating-v8-v10.html

这里有个坏消息:如果您在Vaadin 8上编写了一个大型项目,则必须在转换为Vaadin 10的过程中完全重写它。根本没有迁移路径!

Vaadin 10和Vaadin 8在几个方面相似:

  • 服务器端方法
  • 用于UI逻辑开发的Java
  • 相同的数据绑定方法

底线是: Vaadin 10是从头开始制作的新框架。

正如Vaadin开发人员所承诺的那样 ,Vaadin 8将在2022年之前得到支持,可能会出现新的迁移方法。

结论

我认为重要的事实是,新的Vaadin网站是在Vaadin Flow上创建的。 以前,编程语言的成熟度被定义为其编译器是否使用相同的语言编码。 现在,事实上已成为前端技术的标准。

我希望您现在能对Vaadin 10有所把握。总的来说,它是一个足够好的框架,并且为未来奠定了良好的基础。 对我来说,这是一个用于UI构想的新思想和方法的绝佳实验空间。

翻译自: https://www.javacodegeeks.com/2018/07/vaadin-flow-marvelous-deer.html

vaadin

vaadin_Vaadin Flow –奇妙的鹿相关推荐

  1. Vaadin Flow –奇妙的鹿

    您可能知道,Vaadin是Java上最受欢迎的Web框架之一: https://zeroturnaround.com/rebellabs/java-web-frameworks-index-by-re ...

  2. Google谷歌首席科学家:神经网络的奇妙特性与应用

    文/董飞  2016年3月7日,谷歌首席科学家,MapReduce.BigTable等系统的创造者,Jeff Dean受邀韩国大学,演讲主题<大规模深度学习>,这里部分来自highscal ...

  3. Google的深度学习强在哪?谷歌首席科学家说了这些奇妙特性

     Google的深度学习强在哪?谷歌首席科学家说了这些奇妙特性 赛先生 2016-03-26 07:43:47 人工智能 阅读(360) 评论(0) 2016年3月7日,谷歌首席科学家,MapRe ...

  4. P5030 长脖子鹿放置

    题目背景 众周所知,在西洋棋中,我们有城堡.骑士.皇后.主教和长脖子鹿. 题目描述 如图所示,西洋棋的"长脖子鹿",类似于中国象棋的马,但按照"目"字攻击,且没 ...

  5. 编程中的心流模式flow

    周末看电影,接触到了心流这个概念,挺有意思.了解心流理论,可以指导我们进入一个更为高效愉悦的工作状态. 电影<社交网络>里程序员写代码出现了两次"wired in", ...

  6. 非常普通的鹿中文电脑版

    非常普通的鹿是一款类似于<模拟山羊>玩法的趣味游戏,以动物和人类杂居的城市为背景,凭借自由游玩的独特创意玩法吸引了众多玩家们的注意,在画面上采用了卡通3D渲染方式,更加衬托了游戏沙雕欢乐的 ...

  7. 深度学习编译器Data Flow和Control Flow

    深度学习编译器Data Flow和Control Flow 本文介绍了一下深度学习框架的Data Flow和Control Flow,基于TensorFlow解释了TensorFlow是如何在静态图中 ...

  8. HDU 3549 Flow Problem(最大流模版EK算法)

    题目链接 第一道最大流,赤裸裸的模版题,刚好可以熟悉模版用.今天看了一下最大流,就看了一个EK算法,感觉有点和二分图匹配算法有点相似,对于最大流问题有点了解了,不过为什么这么做,也不是 很懂,只是把代 ...

  9. python输入参数改变图形_Python基于Tensor FLow的图像处理操作详解

    本文实例讲述了Python基于Tensor FLow的图像处理操作.分享给大家供大家参考,具体如下: 在对图像进行深度学习时,有时可能图片的数量不足,或者希望网络进行更多的学习,这时可以对现有的图片数 ...

最新文章

  1. 5分钟 搭建免费个人博客
  2. 福利模块功能实现及考勤模块准备
  3. mysql主从状态异常解决办法
  4. 线上redis一般安在linux_redis的zset有多牛?请把耳朵递过来
  5. WebKit 布局的标准和概念
  6. Java如何读取mysql存入es_java循环读取mysql并存入java集合里
  7. springboot服务调用超时_Spring Boot 异步请求和异步调用,一文搞定
  8. optimize table 需要多久_逸绣墙布十大品牌,墙布的使用寿命有多久.
  9. LeetCode入门题 两数之和
  10. android 模拟器 锁屏,如何在模拟器中测试Android锁屏小部件?
  11. Java 汇编指令详解
  12. 制作win7 u盘启动盘
  13. Drupal主题制作流程
  14. 巴菲特致股东的一封信:1996年
  15. 量化投资:研报文本挖掘选股策略
  16. 2023年天津天狮学院专升本专业课如何线上考试考前准备的要求
  17. ios开发学习笔记(这里一定有你想要的东西
  18. 路由器交换机之重设密码
  19. php对接打码平台,好用的打码平台推荐
  20. Unirech-阿里云国际版云服务器ecs实例使用中的常见问题汇总

热门文章

  1. 洛谷P4322 最佳团伙(树上dp)
  2. YbtOJ-交换游戏【树链剖分,线段树合并】
  3. P3807-[模板]卢卡斯定理
  4. P3830-[SHOI2012]随机树【数学期望,dp】
  5. jzoj4025-找回密码【后缀自动机】
  6. ssl1335-最佳派对【二分图,最大匹配,图论】
  7. 【并查集】【图论】旅行(ssl 1312)
  8. 深入探索 Java 热部署
  9. 键值存储之外,Redis还有这些用法
  10. 如何设计一个安全的登录流程