一直想将一些常规活动抽象化,制作成可配置的。原先的计划是做成拖拽的,那种可视化搭建,运营也能自己搭建页面。

  这是一个美好的愿景,但是现实不允许我花太多精力去制作这样一个系统。经过权衡后,先设计成一个可配置化的系统。

  先对一类常用的打榜活动做定制化的设计,解决当前问题,立竿见影的提升工作效率。

  先说说此系统的价值,当它完成后,受益方将包括设计组、Web组、产品组、QA组和数据分析组。

  (1)设计组不用再考虑界面模块,只需将精力集中到配色和插图上。

  (2)产品组不用再跟进此类活动,她们可以置身事外,设计做好的图可以直接给配置人员。

  (3)QA组不用再过一遍测试,她们只要查看页面表现是否正常即可。

  (4)数据分析组不用再为每个活动手动制订报表,根据存储的信息,可自动生成。

  (5)Web组不用再投入人力去研发界面和接口了,只要页面稳定运行,都不用修线上BUG了。

  原先这么一个活动,人力时间包括2天开发,3天测试,1天产品,6天时间,而现在可以浓缩到几十分钟,大大提升了生产力。

  设计组虽然不会减少页面设计的时间,但是切图的时间绝对能少很多。

  数据分析组本来创建报表也不会费时间,但是会打断他们的工作,自动生成后,运营就完全不用找他们了。

  当然,第一版在人性化使用方面还是欠缺的,后期还有很大的优化空间。

一、规范

  为了完成这个系统,首先是要和各方通气,我直接拉了个会议,叫上相关人员,开了40分钟左右。

  会议中,最重要的是和设计组制定规范,包括图片尺寸、页面元素、字体颜色、间距等。

  

  其实之前与设计组制订过一次规范,这次是在之前的规范之上,再做进一步的完善和补充。

  与产品也要确定界面呈现,例如活动前样式、活动规则等都有多套显示方案,这些是统一还是作为配置的一部分,都要在动手前确认好。

  根据会上确认的规范,就可以开始设计界面了。

二、界面

  界面设计比较朴素,就是根据规范中需要的内容,设计输入框、下拉框等控件。

  

  其中图片管理是整个页面的核心,通过它,可以添加页面各个位置的图片,完成页面的搭建。

  本来是想设置成上传按钮的,但这样弹框会比较长,并且实现复杂度上会比较高,经过权衡后,还是使用了简单的文本框,将地址填入即可。

  列表页面设计的也很精简,为了方便查看活动,特地加上了预览按钮,鼠标移到预览按钮中,还可生成二维码,方便手机扫码查看。

  

三、存储

  原先计划是将数据存储于MongoDB中,因为存储的好几个字段都是JSON格式。

  若存储在MySQL中,那么在写入和读取时需要分别对其进行JSON序列化和反序列化。

  但是后面和数据组沟通,才了解到若要自动生成报表,那么他们就得读表,而MongoDB他们无法读取,之前没有连接,需要开发成本。

  为了众乐乐,最终决定存储于MySQL中,这样的话,数据组也不用额外开发了。

  这样的话,配置就完成了,但是活动页面的数据源是从另外的位置读取的。

  我们组会维护一个定时任务,5分钟读取一次服务端的接口,然后存储到指定缓存中,活动的数据源就是这个缓存数据。

  要完成这个活动系统,需要我们组三个人共同完成,由我负责管理后台的配置界面,另外一人完成活动的接口,还有一人编写H5页面。

Node.js躬行记(16)——活动配置化的更多相关文章

  1. Node.js躬行记(15)——活动规则引擎

    在日常的业务开发中,会包含许多的业务规则,一般就是用if-else硬编码的方式实现,这样就会增加逻辑的维护成本,若无注释,可能都无法理解规则意图. 因为一旦规则有所改变,那么就需要修改代码再发布代码, ...

  2. Node.js躬行记(14)——压力测试

    公司有个匿名聊天的常规H5界面,运营向做一次 50W 的推送,为了能配合她的计划,需要对该界面做一次压力测试. 一.JMeter 压测工具选择了JMeter,这是Apache的一个项目,它是用Java ...

  3. Node.js躬行记(2)——文件系统和网络

    一.文件系统 fs模块可与文件系统进行交互,封装了常规的POSIX函数.POSIX(Portable Operating System Interface,可移植操作系统接口)是UNIX系统的一个设计 ...

  4. Node.js躬行记(4)——自建前端监控系统

    这套前端监控系统用到的技术栈是:React+MongoDB+Node.js+Koa2.将性能和错误量化.因为自己平时喜欢吃菠萝,所以就取名叫菠萝系统.其实在很早以前就有这个想法,当时已经实现了前端的参 ...

  5. Node.js躬行记(6)——自制短链系统

    短链顾名思义是一种很短的地址,应用广泛,例如页面中有一张二维码图片,包含的是一个原始地址(如下所示),如果二维码中的链接需要修改,那么就得发代码替换掉. 原始地址:https://github.com ...

  6. Node.js躬行记(21)——花10分钟入门Node.js

    Node.js 不是一门语言,而是一个基于 V8 引擎的运行时环境,下图是一张架构图. 由图可知,Node.js 底层除了 JavaScript 代码之外,还有大量的 C/C++ 代码. 常说 Nod ...

  7. Node.js躬行记(1)——Buffer、流和EventEmitter

    一.Buffer Buffer是一种Node的内置类型,不需要通过require()函数额外引入.它能读取和写入二进制数据,常用于解析网络数据流.文件等. 1)创建 通过new关键字初始化Buffer ...

  8. Node.js躬行记(7)——定时任务的进化史

    一.纯手工 公司主营的是直播业务,会很许多打榜活动,也就是按主播收到的礼物或收益进行排序,排在前面的会有相应奖励. 纯手工时代,每接到一个活动,就重新写一份,第一次写完.之后就是复制黏贴,再修改,每次 ...

  9. Node.js躬行记(12)——BFF

    BFF字面意思是服务于前端的后端,我的理解就是数据聚合层.我们组在维护一个后台管理系统,会频繁的与数据库交互. 过去为了增删改查会写大量的对应接口,并且还需要在Model.Service.Router ...

随机推荐

  1. 云服务器的windows系统上部署项目

    1.购买云服务器 以百度云服务器为例 https://cloud.baidu.com/campaign/midyear2020/index.html?track=cp:npinzhuan|pf:pc| ...

  2. Swift数组

    数组的介绍 数组(Array)是一串有序的由相同类型元素构成的集合 数组中的集合元素是有序的,可以重复出现 Swift中的数组 swift数组类型是Array,是一个泛型集合 数组的初始化 数组分成: ...

  3. JDK版本基础知识解释

    感谢大佬:https://www.cnblogs.com/bjguanmu/articles/8710209.html jdk:java development kit,是程序员编写java程序需要的 ...

  4. PHP中常见的数字掐头去尾操作方法

    四舍五入round round( float $val[, int $precision = 0[, int $mode = PHP_ROUND_HALF_UP]] ) : float 对浮点数进行四 ...

  5. 动态路由与RIP协议

    动态路由与RIP协议 目录 动态路由与RIP协议 一.动态路由(Dynamic Route) 1.动态路由概述 2.动态路由特点 3.动态路由协议 (1)动态路由协议概述 (2)度量值 (3)收敛 4 ...

  6. redis(一)-----初识redis

    Redis是一种基于键值对(key-value)的NoSQL数据库 因为Redis会将所有数据都存放在内存 中,所以它的读写性能非常惊人.不仅如此,Redis还可以将内存的数据利 用快照和日志的形式保 ...

  7. Solution -「Ynoi 2018」「洛谷 P4117」五彩斑斓的世界

    \(\mathcal{Description}\)   Link.   给定序列 \(\{a_n\}\),处理 \(m\) 次操作: 给定 \(l,r,x\),把 \([l,r]\) 内所有 \(&g ...

  8. [LeetCode]21.合并两个有序链表(Java)

    原题地址: merge-two-sorted-lists 题目描述: 将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例 1: 输入:l1 = [1 ...

  9. 如何通过pid定位是哪个容器

    此时,我有一个pid为28117的进程,通过pdwx命令,无法找到他所在的目录,此时我判定他是docker容器 pwdx 28117 输出如下 28117: / 通过docker ps -q命令,获取 ...

  10. Dubbo源码剖析六之SPI扩展点的实现之Adaptive功能实现原理

    接Dubbo源码剖析六之SPI扩展点的实现之getExtensionLoader - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)继续分析Adaptive功能实现原理.Adaptive的主 ...