基于一个抽奖系统的软件系统设计方案
1. 项目背景介绍
本项目是实现一个基于nodejs的express框架开发的一个抽奖系统。该抽奖系统通过管理员设置抽奖信息、创建抽奖项目并发布,用户只需使用微信扫码即可参与抽奖。
2. 软件设计方案
2.1 系统架构
软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式,常用的软件架构风格有如下几类:三层架构、MVC、MVVM、管道-过滤器、客户-服务器、P2P、发布-订阅、CRUD、层次化等。本项目整体架构使用了MVC架构
本项目采用了BS即Browser/Server(浏览器/服务器)结构,就是只安装维护一个服务器(Server),而客户端选用浏览器(Browse)运行软件。B/S结构应用程序相对于传统的C/S结构应用程序就是一个特别大的进步。 B/S结构的重要特征就是分布性强、维护方便、开发简单并且共享性强、总体拥有费用低。
2.2 接口api
API 定义了客户端与服务端数据交互的基本格式,包括客户端以什么样的格式请求,请求参数,服务端以什么样的格式响应,正确响应与错误响应的不同内容等。
接口名称 | 接口地址 | 请求方式 | 请求参数 | 响应信息 |
---|---|---|---|---|
管理员登录 | /login | post | 账号和密码 | 保存登录状态,基本信息 |
管理员注册 | /register | post | 账号密码等基本信息 | 基本信息 |
查看奖品信息 | /prizes | get | 无 | 所有的奖品信息 |
添加奖品 | /prize/create | post | 奖品信息 | 所有的奖品信息 |
奖品详情 | /prize/:id | get | 奖品id | 奖品信息 |
删除奖品 | /prize/:id/delete | post | 奖品id | 删除成功 |
查看所有抽奖项目 | /projects | get | 无 | 所有抽奖项目信息 |
创建抽奖项目 | /project/create | post | 抽奖项目信息 | 抽奖项目详细信息 |
抽奖项目更新 | /project/:id/update | post | 抽奖项目信息 | 抽奖项目详细信息 |
抽奖项目删除 | /project/:id/delete | post | 抽奖项目id | 删除成功 |
获取项目二维码 | /project/:id/qrcode | get | 项目id | 项目url对应的二维码 |
抽奖项目 | /project/:id | get | 项目id | 项目基本信息 |
参与抽奖 | /project/:id/attend | post | 用户微信openid | 中奖奖品和抽奖次数 |
3. 软件架构的不同视图
软件架构模型是通过一组关键视图来描述的,同一个软件架构,由于选取的视角(Perspective)和抽象层次不同可以得到不同的视图,这样一组关键视图搭配起来可以完整地描述一个逻辑自洽的软件架构模型。一般来说,我们常用的几种视图有分解视图、依赖视图、泛化视图、执行视图、实现视图、部署视图和工作任务分配视图。
3.1 分解视图
分解是构建软件架构模型的关键步骤,分解视图也是描述软件架构模型的关键视图,一般分解视图呈现为较为明晰的分解结构(breakdown structure)特点。分解视图用软件模块勾划出系统结构,往往会通过不同抽象层级的软件模块形成层次化的结构。
3.2 依赖视图
依赖视图展现了软件模块之间的依赖关系。本系统采用MVC框架,下图展现了软件模块之间的依赖关系与MVC模型的逻辑流。
3.3 执行视图
普通用户:扫码参与抽奖。
管理员:主要为奖品和抽奖项目的管理。
3.4 实现视图
软件项目的源文件目录树。
3.5 部署图
采用单点部署,各组件运行于一台服务器上,视图如下
3.6 分配视图
工作分配视图将系统分解成可独立完成的工作任务,以便分配给各项目团队和成员。工作分配视图有利于跟踪不同项目团队和成员的工作任务的进度,也有利于在个项目团队和成员之间合理地分配和调整项目资源,甚至在项目计划阶段工作分配视图对于进度规划、项目评估和经费预算都能起到有益的作用。
4. 主要数据结构(数据库设计)
奖品:
const PrizeSchema = new Schema({
name: {type: String, required: true, max: 100},
pictureUrl: {type: String, required: true}
});
抽奖项目:
const ProjectSchema = new Schema({
name: { type: String, required: true, max: 100 },
times: { type: Number, min: 1, max: 10, required: true },
startTime: { type: Date, required: true },
finishTime: { type: Date, required: true },
prizeList: { type: [{ type: Schema.Types.ObjectId, ref: 'Prize' }], required: true },
numList:[{type:Number}]
});
用户:
const UserSchema = new Schema({
userID: { type: String, required: true, max: 100 },
winPrize: [{ type: String }],
attendProject: [{
project: { type: Schema.Types.ObjectId, ref: 'Project' },
times: { type: Number }
}]
});
5. 运行环境和技术选型
5.1 运行环境
服务器暂时部署在pc机上,项目可以运行在大部分浏览器。
5.2 技术选型
pug:一种模板引擎
bootstrap:页面框架
jQuery:JavaScript的工具集
epress:node.js Web应用框架
mongodb:一个基于分布式文件存储的数据库。
6. 项目概念原型的核心工作机制
普通用户:无需注册,只要使用微信扫码参与抽奖即可。可以实时查看自己的获奖信息以及抽奖次数等基本信息。
管理员用户:主要管理抽奖项目,对抽奖项目的奖品信息管理,对抽奖项目的各类基础属性进行设置以及发布。