当前位置: 首页 > news >正文

DataMaleon组件化开发实践 | StartDT Tech Lab 14

写在前面

这是奇点云全新技术专栏「StartDT Tech Lab」的第14期。

在这里,我们聚焦数据技术,分享方法论与实战。一线的项目经历,丰富的实践经验,真实的总结体会…滑到文末,可以看到我们的往期内容。

本篇由奇点云前端架构师「怒江」带来:

作者:怒江

阅读时间:约8分钟

前情提要

什么是DataMaleon?

DataMaleon是奇点云的一款图形化、零编码的数据可视化产品,能帮助企业快速搭建专业水准的数据可视化应用,低成本实现数据可视化呈现、实时监控、智慧决策、数据分析等功能。简单高效、炫酷生动,满足多元场景展示需求,用视觉语言展现数据美学。

今天介绍的组件化开发,则是数据可视化产品中不可缺少的重要环节。

什么是组件化?

组件化最早可以追溯到工业革命时期,福特创造了流水线生产方式:福特将汽车分解成零部件,再把零部件模块化组装。这一创举极大地提高了生产效率。

在前端开发领域,随着各种优秀的前端框架的出现和前后端分离的开发模式的成功,前端组件化也逐渐成为一种主流和共识,它不仅提高了前端的开发效率,同时也降低了维护成本。

前端组件化会以嵌套的组件树的形式来组织应用,将页面上各个独立部分,例如:头部、导航、内容区、侧边栏、底部等视为独立组件,每个组件又包含了其他的像导航链接、博文之类的组件,最后根据内容需要展示不同的组件即可组成完整的页面。

Vue 组件的组织形式(图源 Vue.js 官网)

前端组件化开发经过多年的发展,不管是服务端渲染,还是前端SPA,都有了比较成熟的组件化开发的方案。Ant Design、Element UI、iView 等优秀前端组件库的流行,更是将组件化开发的优势发挥到了极致。

基于前端组件库的开发模式(图源网络)

可视化开发的痛点

数据可视化的核心和基础是可视化组件,包括图表、地图、媒体、文字、素材、交互等多种类型。

在大量的项目实践中,我们发现了可视化开发存在一些痛点,总结如下:

痛点一

开发门槛高

可视化组件具有可视化、图形化、非原子性等特点。当现有组件不能满足需求时,从零开发一个组件要求开发人员具备数据分析、图形学、可视化、设计学等多种专业知识,需要投入大量的精力。开发门槛高、涉及专业广、投入资源大,是数据可视化开发面临的最大痛点之一。

痛点二

视觉效果不统一

数据可视化是数据到视觉元素的映射,可视化组件的图形元素是表现视觉特征的必备元素,通过图形类别、图形大小、颜色、透明度等视觉通道来表现数据属性的定量信息。

在可视化组件的自定义开发过程中,很难从全局、系列等多个层级对数据图形样式进行统一,从而导致整个数据可视化项目的呈现效果差强人意,自定义的可视化组件不可复用等问题。

可视化图形元素

痛点三

标准化开发难

不同于普通的 Web 组件,可视化组件在实际项目中往往需要不同层度的定制开发。由于图表的构成元素较多,包含图例、标注、坐标轴、提示信息等,相同类型的图表使用不同的图表元素和属性配置,便可具有截然不同的表现形式,天然具有多样性。因此,可视化组件很难通过前端组件库的开发模式来进行标准化开发。

DataMaleon 组件化实践

面对复杂的图表、繁琐的配置、炫酷的视觉效果,以及客户多变的需求,如何在保证质量的情况下做到可视化组件的高效开发?

01

建立图表知识库

首先,我们通过建立图表知识库,解决可视化领域中概念、术语不统一问题,降低可视化开发过程中的沟通成本和开发门槛。

图表知识库 - 图形视觉通道映射规则

图表知识库 - 图表颜色映射

图表知识库是一套包含图表构成、图表用法以及图表知识结构的可视化体系。

· 图表构成决定了图表所属的类别、分析目的、形状以及视觉通道,每个图表都是由一系列独立的图形语法元素组合而成。

可视化图表构成

· 图表用法包含了基于经验总结的关于可视化图表的各种基本知识,以及在不同场景下的使用建议,让可视化开发的图表筛选和使用变得非常简单。

折线图用法示例

· 图表知识结构是对图表构成和图表用法的语义化描述,是连接设计、开发与图表组件库的纽带,它的形式基于JSON。每个图表的知识结构类似这样:

图表知识结构(基础折线图)

02

构建图表组件库

为了降低可视化组件的编码难度,同时满足不同场景的定制开发需求,我们采用分层架构对可视化图表库进行了二次封装,从而支持通过组件的形式组合出无数种图表。

图表组件库分层设计

其中,图表库提供原生的API方法供开发者使用,适用于高度定制开发场景。图形元素和图形组件是对 graphic 绘图方法的封装,而基础组件则是以图表构成元素为视角的更高维度的封装。

使用基础组件,开发者可以像搭积木一样快速组合出任意图表组件。以条形图为例:

同时,我们还在基础组件层完成了可视化主题定制,保证了所有自定义组件的样式和视觉效果的统一。

03

探索组件开发模式

最后,我们还需要解决可视化组件的开发模式问题,打通从生产到消费的前端开发链路。在这个过程中,组件化依然是解决关键问题的重要思想。

为了同时满足可视化组件的统一管理和每个组件可独立发布的需求,我们采用单体式仓库(monorepo)管理项目代码,即在一个项目仓库(repo)中管理多个模块或包(package),每个 package 对应一个可视化组件。

仓库管理模式(图源网络)

相比传统的 monolith 和 multirepo 模式,monorepo 模式在组件的统一构建、版本管理等方面更具优势。

随着可视化组件数量的增多,项目的维护成本会越来越高,我们引入 lerna 作为流程管理工具来优化维护 monorepo 项目的工作流,解决多个组件互相依赖,且发布需要手动维护的问题。

至此,通过构建图表知识库、封装图表组件库,以及使用 monorepo + lerna 的组件开发模式,我们解决了可视化开发中遇到的难点和痛点。最后,我们的DataMaleon组件化开发架构如图:

DataMaleon组件化架构

已上线的可视化组件,可以在DataMaleon平台通过拖拽、配置的方式快速使用:

DataMaleon图表配置

相关文章:

  • 记录一下Elasticsearch集群搭建的知识点
  • 自发荧光/阳离子纳米聚苯乙烯微球/功能化聚苯乙烯共聚荧光微球的研究
  • GBase 8s V8.8的锁机制和隔离级别
  • 浅谈MES管理系统对中国中小企业智能化生产的影响
  • 搜题接口创建 对接百万题库接口
  • SpringBoot自动配置原理入门
  • Linux 磁盘管理
  • 涂鸦电工产品开发包如何使用
  • 初识react笔记
  • Java中的串口编程是怎样的呢?
  • SI好文翻译:铜箔表面纹理对损耗的影响:一个有效的模型(二)
  • 数据结构学习笔记 4-2 哈希表与布隆过滤器 与 LeetCode真题(Java)
  • JAVA基础之动态代理
  • 轻量级神经网络算法系列文章-MobileNet v3
  • 聚苯乙烯负载酸性离子液体(P[Vim-PS][HSO4])|活性炭(AC)负载酸性离子液体[Hmim-BS][HSO4]齐岳
  • Apache的80端口被占用以及访问时报错403
  • C++11: atomic 头文件
  • C++类中的特殊成员函数
  • FastReport在线报表设计器工作原理
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • js中forEach回调同异步问题
  • leetcode46 Permutation 排列组合
  • overflow: hidden IE7无效
  • Promise面试题,控制异步流程
  • Vultr 教程目录
  • 构建工具 - 收藏集 - 掘金
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 力扣(LeetCode)357
  • 设计模式走一遍---观察者模式
  • 数据仓库的几种建模方法
  • 数组的操作
  • 微服务框架lagom
  • kubernetes资源对象--ingress
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • 阿里云重庆大学大数据训练营落地分享
  • 容器镜像
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • 正则表达式-基础知识Review
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • (11)MATLAB PCA+SVM 人脸识别
  • (3)STL算法之搜索
  • (C语言)共用体union的用法举例
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (function(){})()的分步解析
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (十)T检验-第一部分
  • (十三)Flask之特殊装饰器详解
  • (转)JAVA中的堆栈