总结如何设计一款营销低代码可视化海报平台
背景
我所在的部门负责的是活动业务,每天都有很多的营销活动,随之而来的就是大量的H5活动页面。而这些H5活动已经沉淀出了比较固定的玩法交互,我们开发大多数的工作也只是在复制粘贴这种大量的重复工作。
在基于此背景下我开始了低代码平台的开发。
项目架构
首先肯定需要一个可视化编辑器,编辑器主要是以活动为单位进行流转:包括活动的创建、编辑、预览、发布。当然上面流程中的预设模板和组件肯定也要考虑在内。
然后活动搭建完,运营需要去投放,投放侧肯定是H5了,那么对应就要有一个项目来负责对已搭建活动的渲染。渲染端是对客端,也就是投放出去的落地页,用户可以直接看到的。这部分主要是负责对页面的渲染和对应的组件加载、调度,这里采用的是服务端渲染。
然后服务端还需要对上下游提供API。
到这里其实已经可以满足我们最基础的需求了。但这里还有一个不得不提的:组件库。
上面两个比较好理解,那为什么需要组件库呢?组件库核心作用在于复用,我们知道上图中间的画布区域、预览区域以及最终渲染端其实展示都是一样的,这种场景下怎样实现最大程度的复用呢?这个时候就要依附于组件库的能力了。
组件库侧会积累编辑器中经常用到的一些基础组件,像我们这里主要就是文字、图片和素材了,文字和图片比较好理解。素材以形状为主。
细化一下需求:编辑器需要一个前端和服务端;渲染端直接用服务端渲染就行,所以只需要一个项目;组件库可以接入我司已有的组件库;监控统计可以接入我司已有的监控平台。
数据结构及其流转关系
古有“数据驱动视图”,今天我们就结合编辑器视图页面来反推数据。这里思考几个问题:
- 组件Schema应该怎么设计?
- 组件的数据如何去维护?
每个组件都是单一的个体,画布区域由很多个组件组合而成,很容易想到要维护一个组件数组:
components: ComponentData[];
interface ComponentData {props: AllComponentProps;// id,uuid v4 生成id: string;// 业务组件名称name: 'string';...
}
然后当组件被选中时,右侧的属性面板应该展示选中组件的对应属性,这个时候就要维护一个当前编辑的组件数据字段了:
currentComponent: {}
具体交互映射可看下图。
画布区域可以对组件进行添加、删除、编辑操作,就要有对应的方法与之匹配:
// 添加组件到componentData
addComponent(){},
// 编辑组件,更新componentData及currentComponent
updateComponent(){},
// 删除组件
deleteComponent(){}
对于可视化编辑器
这种大型前端项目,须有一个全局状态管理机制去做数据的存储和分发。这样对于数据状态的共享和同步也是很有帮助的。所以以上这些均需要维护在全局的store
中:
state:{
// 所有添加到画布中的组件数据
components: [],
// 当前编辑的组件数据
currentComponent: {}
} mutations:{
// 添加组件到components
addComponent(){},
// 编辑组件,更新components
updateComponent(){},
// 删除组件
deleteComponent(){}
}
大的数据流转关系弄清楚了,接下来就是来设计下每个组件的Schema
,由于组件都是直接来自于组件库,所以要有一些通用的属性:
interface ComponentData {props: AllComponentProps;// id,uuid v4 生成id: string;// 业务组件名称name: 'string';...
}
这里的props更多是和组件本身相关联的属性,主要是一些样式属性,像宽度(width)、高度(height)、外边距(margin)、内边距(padding)、透明度(opacity)、边框(border)、位置(position)、透明度(opacity)等。
除了这些每个组件都具有的基本属性外,像文字组件还具有字体相关的fontSize、fontFamily、fontStyle、color等属性;图片组件还具有图片链接imageSrc属性;素材(形状)组件还具有背景色(background)属性。
组件的Schema看完,我们回到全局,也就是活动维度,看下单个活动的Schema:
interface PageData {id?: number;props?: PageProps;title?: string;desc?: string;coverImg?: string;uuid?: string;setting?: { [key: string]: any };isTemplate?: boolean;isHot?: boolean;isNew?: boolean;author?: string;copiedCount?: number;status?: number;user? : {gender: string;nickName: string;picture: string;userName: string;};
}
除了组件属性外,还需要具备页面id、标题、描述、创建者、状态、是否为模板、属性props(主要包含了页面的宽度、高度、背景色等)
了解了整体大概的数据结构设计后,我们再来整理下数据流转关系:
- 创建作品:用户创建作品,实为初始化了一个json数据
- 保存作品:保存作品其实就是对json初始化的json就行了修改
- 发布作品:作品的发布就是修改了作品的状态(上面
PageData
中的status
) - 浏览作品:作品的浏览就是在C端,服务端根据id和uuid拉取对应页面和组件配置,然后渲染
- 下线作品:有些活动存在有效期,超过有效期后如果运营想下线活动可以直接下线,其实也只是status的修改,同样在C端也要添加对应逻辑
服务端
服务端框架选择的是koa2。
数据库的选择方面,像基础的作品信息(不包含作品内容)比较适合用表格形式存储,对应的也就是mysql
。而作品内容一般都是JSON
,这种更适合使用mongodb
存储。真正的线上环境肯定会存在高并发的场景,这个时候缓存就很有必要了,这里使用的是redis
作为缓存方案。
总结
本篇主要总结了背景、项目架构、技术选型。后面应该会总结下细节方面的难点。
相关文章:
总结如何设计一款营销低代码可视化海报平台
背景 我所在的部门负责的是活动业务,每天都有很多的营销活动,随之而来的就是大量的H5活动页面。而这些H5活动已经沉淀出了比较固定的玩法交互,我们开发大多数的工作也只是在复制粘贴这种大量的重复工作。 在基于此背景下我开始了低代码平台…...
spark04-文件读取分区数据分配原理
接 https://blog.csdn.net/oracle8090/article/details/129013345?spm1001.2014.3001.5502通过上一节知道 总字节数为7 每个分区字节数为3代码val conf: SparkConf new SparkConf().setMaster("local").setAppName("wordcount")val sc: SparkContext ne…...
常见的网络安全攻击及防御技术概述
网络安全技术涉及从物理层到业务层的各个层面,贯穿产品设计到产品上线运营的全流程。现阶段网络攻击的方式和种类也随着互联网技术的发展而不断迭代,做好网络安全防护的前提是我们要对网络攻击有充分的了解。下文将抛砖引玉对常见的网络安全攻击及防御技…...
NetSuite Balancing Segment平衡段
春节假期偷了一段时间懒,现在开始工作了。今朝谈一个偏门题目,于未知领域再下一城。说这个题目偏,就要讲讲渊源。话说在Oracle的EBS和Fusion产品中的COA领域有个功能叫做“Balancing Segment”。 问了几位Oracle老炮,也说是对第二…...
Docker 中遇到的问题
1:docker-tomcat 篇 第一天启动主机和虚拟机都可以正常访问,晚上睡觉的时候就挂起关机睡觉了,但到了第二天主机访问不了了,ping 也能ping 通,后来停掉容器,重启了虚拟机就好了,就很离谱。 这是成…...
树莓派用默认账号和密码登录不上怎么办;修改树莓派的密码
目录 一、重置树莓派的默认账号和密码 二、修改树莓派的密码 三、超级用户和普通用户的切换 一、重置树莓派的默认账号和密码 在SD卡中根目录建立文件userconf 在userconf中输入如下内容: pi:$6$/4.VdYgDm7RJ0qM1$FwXCeQgDKkqrOU3RIRuDSKpauAbBvP11msq9X58c8Q…...
【LeetCode】不同的二叉搜索树 [M](卡特兰数)
96. 不同的二叉搜索树 - 力扣(LeetCode) 一、题目 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入:n 3 输出&a…...
【软件相关】文献管理工具——Zotero
文章目录0 前期教程1 前言2 一些说明3 下载安装4 功能一:插入文献引用格式5 功能二:从网页下载文献pdf和题录6 功能三:数据多平台同步7 功能四:通过DOI添加条目及添加订阅8 安装xpi插件9 功能五:智能识别中英文文献10 …...
leetcode练习一:数组(二分查找、双指针、滑动窗口)
文章目录一、 数组理论基础二、 二分查找2.1 解题思路2.2 练习题2.2.1 二分查找(题704)2.2.2 搜索插入位置(题35)2.2.3 查找排序数组元素起止位置(题34)2.2.4 有效的完全平方数(题367)2.2.5 x 的平方根&…...
iPhone更新iOS 16.3出现应用卡死、闪退的问题怎么办?
在升级最新的 iOS 16.3 系统后,有些用户可能遇到了个别应用无法正常打开,卡死的异常情况。大家可以尝试通过如下方式解决问题。 1.重新启动应用: 如果应用出现卡死或闪退,可从 iPhone 屏幕由底往上滑(或连续按两次 H…...
TCP协议原理一
文章目录一、TCP协议二、TCP工作机制1.确认应答2.超时重传3.连接管理三次握手四次挥手一、TCP协议 我们的TCP协议相比于UDP协议复杂不少,今天我们就来一起学习一下TCP协议报文和原理 首先我们报头第一行里的端口号和UDP的端口号是一致的,都是用两个字节…...
【黑马SpringCloud(6)】Sentinel解决雪崩问题
微服务保护雪崩问题服务保护技术Sentinel微服务整合Sentinel流量控制簇点链路入门练习流控模式关联链路流控效果Warm Up排队等待热点参数限流隔离和降级FeignClient整合Sentinel线程隔离(舱壁模式)实现线程隔离熔断降级慢调用异常比例/异常数授权规则获取origin给网关添加请求头…...
微信小程序 java springboot招聘求职应聘简历系统
应聘系统是基于微信小程序,java编程语言,mysql数据库,springboot框架,idea工具开发,本系统主要分为用户,企业,管理员三个角色,用户注册登陆小程序,查看应聘分类ÿ…...
亿级高并发电商项目-- 实战篇 --万达商城项目 四(Dashboard服务、设置统一返回格式与异常处理、Postman测试接口 )
专栏:高并发---前后端分布式项目 👏作者简介:大家好,我是小童,Java开发工程师,CSDN博客博主,Java领域新星创作者 📕系列专栏:前端、Java、Java中间件大全、微信小程序、…...
为什么这11道JVM面试题这么重要(附答案)
本文内容整理自 博学谷狂野架构师 运行时数据区都包含什么 虚拟机的基础面试题 程序计数器Java 虚拟机栈本地方法栈Java 堆方法区 程序计数器 程序计数器是线程私有的,并且是JVM中唯一不会溢出的区域,用来保存线程切换时的执行行数 程序计数器ÿ…...
概率统计之概率篇
概率统计之概率篇 一 随机变量及其四种研究方法 为了更深入地研究随机现象,需要把随机试验的结果数量化,也就是要引进随机变量来描述随机试验的结果。 一般地,把表示随机现象的各种结果或描述随机事件的变量叫做随机变量。随机变量通常用大…...
综合项目 旅游网 【5.旅游线路收藏功能】
分析判断当前登录用户是否收藏过该线路当页面加载完成后,发送ajax请求,获取用户是否收藏的标记根据标记,展示不同的按钮样式编写代码后台代码RouteServlet/*** 判断当前登录用户是否收藏过该路线*/ public void isFavorite(HttpServletReques…...
【ArcGIS Pro二次开发】(3):UI管理_显示隐藏Tab、Group、Control等控件
在ArcGIS Pro工作中,有时候会涉及到工具栏UI的管理,比如,打开模型构建器时,工具栏才会出现新的选项卡(Tab)【ModelBuilder】,工程未做更改,则【保存】按钮显示灰色不可用。 下面以一个小例子来学习一下。 一…...
Spring Boot开发实战——echarts图标填充数据
echarts模块的导入 先看看成品吧! 有的图标的数据用了一些计算框架不是直接查数据库所以有点慢。 ok!😃 上正文,接上节Spring boot项目开发实战——(LayUI实现前后端数据交换与定义方法渲染数据)讲解了一般…...
李达聪老师:互联网时代的B2B品牌如何塑造
李达聪老师:互联网时代的B2B品牌如何塑造互联网时代企业对企业的品牌如何塑造?互联网时代信息传播速度加快,并且各大新品牌就如春天的竹笋涌出,有的昙花一现,有的趁着时代的红利乘胜追击占领市场,建立品牌。有的成为一…...
javaEE 初阶 — 连接管理机制
文章目录连接管理机制1. 建立连接(三次握手)2. 断开连接(四次挥手)TCP 的工作机制确认应答机制 超时重传机制 连接管理机制 比如 主机A 的空间存储了 主机B 的 ip 和 端口,主机B 的空间存储了 主机A 的 ip 和 端口。…...
40个改变你编程技能的小技巧!
40个改变编程技能的小技巧 1、将大块代码分解成小函数 2、今日事今日毕,如果没毕,就留到明天。 如果下班之前还没有解决的问题,那么你需要做的,就是关闭电脑,把它留到明天。 中途不要再想着问题了! 3、…...
iTOP3588开发板直连电脑配置方法(无线上网)配置主机IP
首先使用网线连接好主机和开发板,在没有上电的情况下,可以看到以太网显示网络电缆 被拔出,如下图所示: 当开发板上电以后,开发板网卡与笔记本电脑的网卡会连接,如下图所示: 然后右键点击以太网…...
压电陶瓷换能器导纳圆图公式推导及匹配
压电陶瓷换能器的等效电路图如下图所示,分为左右两个部分左边的电容和电阻并联构成了电路的静态支路,被称为静态电容,可以由电表很方便的测量得到,这部分的参数是由换能器的电学参数决定的。右边的串联构成了动态支路,…...
设计模式C++实现11:观察者模式
参考大话设计模式; 详细内容参见大话设计模式一书第十四章,该书使用C#实现,本实验通过C语言实现。 观察者模式又叫做发布-订阅(Publish/Subscribe)模式。 观察者模式定义了一种一对多的依赖关系,让多个观察…...
l1和l2接口如何进行编写?一定要掌握这几个元素
在这个大数据时代,很多地方都需要用到l1和l2接口,l1和l2接口在应用程序与数据库之间起着桥梁的作用,是实现数据的整合与共享的重要帮手。 l1和l2接口适用于各行各业,应用场景的不断拓展,l1和l2接口的发展也兴起&#…...
GAMES101作业7及课程总结(重点实现多线程加速,微表面模型材质)
目录闲言碎语最终全部效果展示(均为10241024512ssp)课程总结与理解(Path Tracing)框架梳理任务一:迁移相关代码任务二:实现path tracing任务三:多线程加速(包括其他加速的小trick&am…...
面试题(二十四)数据结构与算法
9.1哈希 请谈一谈,hashCode() 和equals() 方法的重要性体现在什么地方? 考察点:JAVA哈希表 参考回答: Java中的HashMap使用hashCode()和equals()方法来确定键值对的索引,当根据键获取值的时候也会用到这两个方法。…...
【HAL库】STM32CubeMX开发----STM32F407----Uart串口接收空闲中断
一、Uart串口接收空闲中断----详解 首先介绍串口通信的数据传输方式,这样后面的Uart串口空闲中断能更好的理解。 Uart串口通信----数据传输方式 串口通信的数据由发送设备通过自身的TXD接口传输到接收设备得RXD接口。 一个字符一个字符地传输,每个字符…...
Qt_文件操作
本文包含以下内容: 文件操作 基本介绍:ini文件:csv文件:代码功能文件读写:1.1 读取文件1.1.1按行读取1.1.2整体读取1.2 写入文件2. 文件信息读取3. 文件夹的创建4. 获取文件夹下所有的文件5. 获取文件夹及子文件夹下所有的文件用树的方式在界面显示文件夹目录基本介绍: …...
东莞最好的网站建设/登封seo公司
<jsp:include>动作元素 (1)<jsp:include>动作元素 <jsp:include>动作元素用来包含静态和动态的文件。该动作把指定文件插入正在生成的页面。 <jsp:include>动作元素语法格式如下: <jsp:include page"相对URL地址" flush"…...
建设兼职网站目的/合肥网络推广公司
前言 Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现 服务注册和发现。Eureka 采用了 C-S 的 设计架构。Eureka Server 作为 服务注册中心,系统中的 其他微服务,使用 Eureka 的 客户端 连接到 Eureka Server,并通过 心跳连接 检…...
用sql网站建设基本流程/广告优化师是做什么的
echo offrem //设置变量 set Nic"本地连接" rem //可以根据你的需要更改, set Addr192.168.192.133set Mask255.255.255.0set Gway192.168.192.1set Dns1192.168.192.1set Dns2192.168.192.1rem //以上依次为IP地址、子网掩码、网关、首选DNS、备用DNS echo …...
昆山高端网站建设公司哪家好/茶叶网络营销策划方案
w ^ 我个人对卷积的理解: 卷积是一种对一个目标的一组参数中我们已经得知其中部分我们需要的参数特征,进而需要得到这组参数全部特征的计算方法,来源:泛函分析褶积。 卷积这个概念最早用在图像信号处理上,所以会出现…...
哪个网站音乐做的最好的/企业邮箱登录
wmsys.wm_concat(to_char(....))转载于:https://www.cnblogs.com/gengaixue/archive/2012/09/25/2701269.html...
做调查挣钱的网站/长沙专业竞价优化公司
1.STP交换机通过交换STP协议帧来建立和维护STP树,并在网络的物理拓扑发生变化时重新建立STP树。 2.STP协议帧由STP交换机产生,发送、接收和处理。STP协议帧是一种组播帧,组播地址是01-80-c2-00-00-00。 3.STP协议帧采用IEEE 802.3封装格式&…...