#云开发高阶实战任务总结# 投票系统的解析与设计
时间:2022-07-23
本文章向大家介绍#云开发高阶实战任务总结# 投票系统的解析与设计,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
DNSPod x 云开发CloudBase 联合特惠
免运维更省事,低成本快速打造生动的站点应用
云开发活动详情:https://cloudbase.net/community/activities/db9f2d6c5eefa7d20034247749f1879c.html
任务解析
模拟操作流程
- 在比赛开始前,观众看到前台提示“暂未开始”;
- 管理员进入后台,添加选手信息,开启比赛;前台自动更新提示文字;
- 后台选择一位选手并通知前台展示信息;前台自动显示选手信息;
- 后台开启该选手的投票;前台自动开始计时并允许投票;
- 投票结束后,前台自动停止计时并禁止投票;后台可查看投票情况;
- 循环步骤 3 至步骤 5;
- 后台关闭比赛。
再加亿点点细节
- 阶段五的“用户验证开关”可解读为:当开关关闭时,新观众也可随时进入投票;当开关开启时,观众必须有向之前选手投票的记录,才能对当前选手投票。然而,至于是要求全程都参与过投票才可以,还是之前参与过至少一次投票即可,任务详情中并没有明确的要求。从实现上来说,后者比前者简单。
- 能否在一开始即将“用户验证开关”打开?
- 后台的投票列表(显示向特定选手投了支持或反对票的用户)是否需要实时刷新?
- 前台是否有必要显示选手的投票结果?
- ……
设计
数据结构
config 集合 用于存储系统的配置信息。系统的总开关status
和用户验证开关participation
是肯定要有的,还需要“有明确表示当前选手的标志” 即cand_id
。对倒计时来说,投票结束的时间可以和选手绑定,也可以不绑定。如果不绑定,则加入第四个配置项expiry
。
candidate 集合 用于存储选手信息。字段包括姓名name
、简介intro
、照片photo
等。
vote 集合 用于存储投票情况。字段包括观众 ID_openid
、选手 IDcand_id
、投票类型(支持或反对)type
等。
布局
前台一个页面,从上到下依次为:状态栏(暂未开始 / 比赛中)、选手信息(照片、姓名、简介)、投票区(投票状态、计时器、投票按钮)。
后台一个页面,从上到下依次为:状态栏(暂未开始 / 比赛中)、控制区(比赛状态开关、“用户验证开关”)、选手列表(姓名、投票小计)、投票情况(某选手的投票详情)。
数据流
- 在比赛开始前(config 集合的四个配置项中,两个开关置于 0,选手标记和计时标记清空),观众看到的前台提示“暂未开始”(读取 status);
- 管理员进入后台(登录校验),添加选手信息(candidate 集合新增一条记录,其中 photo 字段为照片在云存储中的 fileID),开启比赛(status 置 1);前台自动更新提示文字(读取 status);
- 后台选择一位选手并通知前台展示信息(配置项 cand_id 值设置为 candidate 集合中响应选手的 ID);前台自动显示选手信息(“通知”即为监听并获取选手信息,云存储 getTempFileURL() );
- 后台开启该选手的投票(配置 expiry 值为从现在开始 45 秒之后);前台自动开始计时并允许投票(监听并获取 expiry,本地倒计时);
- 投票结束后,前台自动停止计时并禁止投票(本地倒计时);后台可查看投票情况(定时刷新);
- 循环步骤 3 至步骤 5;
- 后台关闭比赛(status 置 0)。
再加亿点点细节
- 云存储和数据库三个集合的权限应如何设置?
- 即便对资源设置了严格的权限,有哪些数据库操作依然是不宜直接在客户端(HTML / JavaScript)代码中进行的?
- 每位选手的投票倒计时结束后,
cand_id
和expiry
是否需要清空?这两个字段究竟应该由谁来维护? - 45 秒的投票时间中,能否切换“用户验证开关”?
- 是否应该支持对已完成投票的选手再开一次投票?如果支持,原有的投票是否需要清空?
- 任务详情要求刷新前台页面后能实时获取状态,那么后台页面是否也应支持这一特性?
- ……
- python学习手册-环境安装和配置
- 全球最大家谱网站Ancestry.com意外泄露了30万名用户的登录凭证
- 摸金Redis漏洞
- 机器人越来越像人,你会担心你的工作被人工智能取代吗?
- 一句代码实现批量数据绑定[上篇]
- 机器学习-从高频号码中预测出快递送餐与广告骚扰
- MS Windows 下基于Atom的LaTeX编译环境的配置
- WCF中的Binding模型之一: Binding模型简介
- WCF中的Binding模型之一: Binding模型简介
- 2017最火的五篇深度学习论文 总有一篇适合你
- SplashScreenSource的妙用
- SplashScreenSource的妙用
- SplashScreenSource的妙用
- Nodejs学习笔记(十七)--- 浮点运算decimal.js
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 保姆级教程:还愁不会搭建伪分布式吗?(其实很简单)
- 如何使用OpenCV RTMP直播推流
- Scrapy框架新手入门教程
- STM32 F4串口接收中断
- RTOS函数命名规则
- 通过思维导图,让女朋友搭建一个hadoop完全分布式
- FreeRTOS内核应用开发手记
- 移植FreeRTOS后运行,卡在uxDeletedTasksWaitingCleanUp
- 99%的人都不知道内网、外网、宽带、带宽、流量、网速之间的区别与联系
- 什么是前缀树--打开了我的新思路
- 一个案例搞懂原码、反码、补码,不懂得请看过来
- 人人都在用,但你却不知道它背后发生了什么——浏览器的工作原理:浏览器幕后揭秘
- 这有一把钥匙,打开MySQL死锁问题!
- 普通人如何全面了解大数据的特点,意义和发展前景
- 面试官问我Linux下常见网络命令