总结如何设计一款营销低代码可视化海报平台

背景

我所在的部门负责的是活动业务,每天都有很多的营销活动,随之而来的就是大量的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作为缓存方案。

总结

本篇主要总结了背景、项目架构、技术选型。后面应该会总结下细节方面的难点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/47243.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我们来聊聊如何选择一家靠谱的学习机构

随着云时代的来临,大数据技术越来越受各位朋友的青睐,这其中不乏有很多是0基础的朋友,我相信大多数朋友都会考虑找一家靠谱的培训机构集中学习一段时间,从而进入大数据行业,因为这是最有效率的方式。那么在众多的机构中…

又有人因为买考研资料被骗!4种常见骗局曝光,第三种最可恶!

前短时间在微博上看到了一位伙伴,他就因为“被骗”陷入了无限自责当中: 到底因为什么被骗我们不去追问,但是就像“每年都有人忘带准考证”的新闻一样,“xxx因买考研资料被骗”、“xxx因买押题资料花了上千元”已经是考研人的“常规…

电脑城最简单骗局,仍然有无数人上当

今天在一个微信群中偶然看到有群友提起自己去电脑城买电脑的故事,这位朋友和我一样,也是搬砖程序员一枚,他说电脑城的业务员告诉他说:“你看上的那款电脑,不适合你,因为这个型号的电脑只能从应用市场下载软…

哎,开发又被骗了……

原来有朋友给我说:人性经不起考验。 但是我觉得还是诚信的人比较多的。 但是直到我又被鸽了…… 怎么说又? 上周开发,接了个活,做完了,鸽我了。 不过这次鸽的我更心寒了。 前两天,有个粉丝私信我&#xff0…

谈谈培训机构的-骗局-怎么避免被坑

前言 本文只谈"骗局",不谈其他,绝不引战,如有错误,希望指出我会及时改正,想要讨论的可以在留言区写下你的观点和经历。 为什么要写这篇文章呢,近些年培训这个话题也比较火,很多在看这…

这些培训机构的骗局,一定要注意

本文作者:十三 Github:https://github.com/ZHENFENG13 前言 本文只谈"骗局",不谈其他,绝不引战,如有错误,希望指出我会及时改正。 为什么要写这篇文章呢,近些年培训这个话题也比较火&…

谈谈培训机构的-骗局-给新人一些建议

前言 本文只谈"骗局",不谈其他,绝不引战,如有错误,希望指出我会及时改正,想要讨论的可以在留言区写下你的观点和经历。 为什么要写这篇文章呢,近些年培训这个话题也比较火,很多在看这…

Postman测试@RequestBody发送请求时报400错误

postman测试requestbody时碰到400错误 原因: ●传参数如果不使用RequestBody,在使用Postman进行Post请求时, 通常做法是填入key和value的值即可。 ●传参数如果使用RequestBody,在使用RequestBody注解时,在发送请求时,就需要在Postman的"…

Postman(06)Postman调接口报错400 Bad Request

📚 问题背景 今天有个盆友碰见一个很有趣的问题,他在本地写了个接口,想要用Postman做一下测试,他说自查了一遍,接口写法没问题,项目启动也非常正常,但是在Postman里一调就报错“400 Bad Reques…

Postman报401错误

问题: 出现401 无权限 解决办法: 重新获得token,然后重新写一个新的token的值就好了。

postman 的post请求报 400 Bad Request

记录一下postman的post 请求出错的问题: 以上的请求是token过期,只需要将token 的value值换一下。 以上的请求是你的post请求体的参数类型写错了,我这里是把startTime和endTime写错格式, 因为java代码中规定了格式为:…

POST请求 status 415错误解决方法(POSTMAN测试)

问题 测试的时候使用postman进行测试,结果出现了415错误,状态 已解决解决方法 经仔细排查代码发现需使用application/json格式,进行body内容的发送。操作如图

Postman报:400 Bad Request

前言 使用Postman发送Post请求报400,入参为JSON;Postman截图 二、分析 1、Postman请求并没有请求到后台Api(由于语法错误,服务器无法理解请求);2、入参出错范围:cookie、header、body、form…

Postman发送post请求时报400错误,Required request body is missing

项目形参位置存在RequestBody注解,用Postman发送post请求时报400错误,Required request body is missing。 错误图示: 解决方法: 方法一: 项目中形参位置不使用RequestBody,在Postman进行Post请求时&…

Postman报401错误,Unauthorized以及其他接口如何填上token

用Postman测试接口,报401错误,Unauthorized Unauthorized是指没有权限,我们想要测试这个接口,但是前提要用户登录获得权限,现在怎么办呢? 我们测试登录的接口,拿到token 接着,我们…

Sam Altman 示范 ChatGPT 自定义指令

OpenAI的CEO在社交媒体上亲自推广ChatGPT的自定义功能。这一大段的prompt词是什么意思?我们让GPT翻译下: 那么,如果制作成MixCopilot的工作流是怎么样的?只需要打开编辑器,在角色节点输入以上提示词,保存下…

计算机考研网络复试总结

记:2020年5月17日,我终于结束了令人煎熬的研究生复试。2020年注定不平凡,研究生网络复试感觉还挺好的,一来可以节省一笔不小的开支,二来没有一群导师面对面提问的那么有压力。接下来谈一谈自己的感受以及老师问的题目。…

杭电复试笔记第六天

又是忙碌又焦急的一天。 早上六点起来,小明同学就开始学习英语,被逼无奈的我也跟着学习英语,本身骨子里就是个懒散的人,羡慕小明同学这种自学能力超强,超用功的男生。和小明同学一起复习了很多专业课知识。然后直接奔…

川大计算机差额复试比例,四川大学研究生复试比例

chanchangben 新兵答主 02-19 TA获得超过9921个赞 研究生复试后可以选择服从调剂。开通调剂系统的几天之内,不少院校并没有完成复试工作,所以像标题说的那些进入了第一志愿复试的人,这个时候并不知道自己会不会被刷掉,但这个时候调…

清华计算机考研复试机试,请问清华考研计算机复试考什么

满意答案 vwild 2015.06.01 采纳率:55% 等级:11 已帮助:5245人 清华大学计算机专业研究生复试有体检,专业课笔试,英语面试,上机考试,导师面试等几个部分。而复试的比例一般占总成绩的50%左右…