CTF学习平台设计方案
1. 项目设计
本项目的介绍在上一篇博客中有了基本的介绍,详情可以翻阅 https://www.cnblogs.com/DingZerui/p/14110968.html
本篇博客将对一些重点的部分进行更细致的说明
1.1 功能模块分解
经过分析,可以做出如下功能分解视图:
1.2 系统架构
本项目最终选用MVC架构模式,这种架构模式中的M(Model),V(View),C(Controller)各层之间相对独立,且分工明确。在本项目中,具体设计如下:
通过上面的分析,我们决定为系统选择B/S结构。
1.3 运行环境与技术选择说明
通过以上的分析,我们在后端选择SSM框架,也即Spring+SpringMVC+Mybatis,这样开发效率较高且学习成本相对低,而在前段选择vue.js框架, 开发环境如下:
- IntelliJ 2019.3.4 x64
- java version 10.0.2
- mysql 5.7
- mybatis-generator-core-1.3.2
- VSCode-1.43.0
- vue 2.9.6
- Navicat 10.0.11
因此,这个的业务流程可以简单描述为:
2. 概念原型的视图
类图与用例图在概要设计的阶段已经基本完善,但是对于每个用户在具体使用时的情况仍然不是很明了,所以我们此时使用执行视图来对系统进行更进一步的描述:
2.1 登录执行视图
2.2 答题执行视图
2.3 评论执行视图
3. 数据库设计
3.1 数据库E-R图
根据对业务的分析,我们认为应该有如下的数据库结构,用E-R图来表示对数据库的设计
3.2 关键数据库表设计
下面我们又对关键的数据库表结构进行了设计
3.2.1 用户表
字段名称 | 字段类型 | 描述 |
userId | int | 用户的id |
userName | varchar | 用户姓名 |
Coins | int | 用户所获得积分数 |
Answered | varchar | 已回答题目列表 |
CreateDate | DATE | 创建日期 |
3.2.2 题目表
字段名称 | 字段类型 | 描述 |
ProId | int | 题目的编号 |
ProTitle | varchar | 题目的名称 |
ProContent | varchar | 题目内容 |
ProCoins | int | 题目积分 |
AnswerId | int | 答案编号 |
EnclosureId | int | 附件编号 |
4. 项目实现视图
本项目的后端源代码目录结构如下:
项目名称为CTFProject,com中存放代码
- pojo包中存放业务划分的代码,主要为java类
- controller包中存放与前端交互的代码
- dao包存放与数据库中交互的代码,主要为mapper文件
- project包中存放一些业务特定的类,比如向浏览器中返回指定的错误代码
- resource中存放配置文件如指定运行端口
5. 系统概念原型的核心工作机制
普通用户
- 普通用户可以进行注册和登录操作
- 普通用户可以查看自己的主页
- 普通用户可以在主页查看自己的答题列表
- 普通用户可以选择题目答题并提交答案进行检查
- 答案正确时会给用户进行积分操作
- 普通用户可以在不会答题时可以选择提示
- 普通用户可以查看题目的题解
- 普通用户可以进行评论或者对某一个评论进行追评和点赞
- 普通用户可以发布自己的题解
开发人员(管理员)
- 可以向数据库中添加或删除题目
- 可以修改题目的答案
- 可以调整题目的属性,如附件,积分等
- 可以对评论进行删除或其他操作
- 可以对用户的信息进行备份
6. 总结
这个工程实践总体上来讲还是采用相对成熟的架构和技术,对整个业务进行分析使得我对于这个项目和软件工程的方法更加了解。同时,进行这样的分析后,开发效率也大大提高,这个过程是值得以后开发借鉴的。