主要工作内容
- 需求分析
- 库表设计
- 后端基础CRUD开发
- 后端业务流程开发
需求设计
- 项目后端功能:
- 用户注册/登录,管理员管理用户信息
- 登录成功后的用户创建答题应用 => 创建应用中的题目(包括题目选项得分) => 创建评分规则(评分策略和评分结果)
- 管理员管理应用,即审核、发布/下架应用
- 用户查看和检索market中的应用列表,进入应用详情页,在线答题并提交回答
- 经过评分模块计算后,用户可查看本次评分结果
- 根据上述功能,模块划分如下:
- 用户模块
- APP服务模块
- 题目模块
- 答题模块
- 统计分析模块
库表设计
- 基本与功能模块对应:
- 用户表:记录用户的基本信息和创建/更新时间等
- APP表:记录APP基本信息/类型/审核状态和创建/更新/审核时间等
- 题目表:记录题目的基本信息和创建/更新时间等,题目内容使用json格式
- 答题记录表:记录答题记录和创建/更新时间等
- 评分结果表:记录答题结果的评析结果和创建/更新时间等,不同类型的题目使用不同的字段填充结果
开发流程
项目初始化
- 使用鱼皮大佬 程序员鱼皮的一个基于springboot的项目初始化模板来初始化项目,该模板中整合了常用框架和主流业务的示例代码。
- 后续会根据自己的项目开发经验来对模板进行改造,逐渐形成自己的初始化模板。
后端基础开发
涉及主要方面:
- 数据访问层代码生成:
使用IDEA插件 MyBatisX 根据设计的库表来自动生成 mapper 和 数据库实体类 代码,并移动到相应包下。 - 业务逻辑代码生成:
使用鱼皮的万用模板的代码生成器工具(CodeGenerator)生成代码,包括:Controller、Service 接口和实现类、数据模型包装类和枚举类。后续应该还会做一下 CodeGenerator 这个项目 - 数据模型开发:
通过分析不同层间传输需要的属性,区分了 DTO/VO 等类的方式,保持了系统的分层架构和职责分离,提高了系统的可维护性和可扩展性,确保了数据传输和处理的清晰和高效。- DTO类(Data Transfer Object)
DTO 用于在不同的层或服务之间传递数据,通常用于在服务层和控制层之间传输数据。
DTO 的主要目的是减少方法调用的次数,并简化数据传输过程。
例如:对于 APP 模块来说,涉及到 APP 添加接口、APP 编辑接口、APP 更新接口等 APP 相关功能,而这些接口的调用所需的属性各不相同,因此可以通过区分AppAddRequest、AppEditRequest类封装所需的属性。 - 视图类(View Object)
定义 VO 类作用是专门给前端返回对象,可以节约网络传输大小、或者过滤字段(脱敏)、保证安全性。VO 通常只包含在视图中需要显示的数据,可能与 DTO 有重叠,但更多关注的是 UI 层的数据表示。 - 请求类(Request Object)
请求类用于接收来自客户端的请求数据,通常用于控制层(Controller)。它们封装了客户端传递的数据,用于处理表单提交、API 调用等。 - JSON结构对应的类
- 枚举类
例如应用的类型(测评类/得分类)、应用审核的状态等。
- DTO类(Data Transfer Object)
- Controller和Service的接口及服务类开发
- 评分模块开发
需求:针对不同的应用类别和评分策略,编写不同的实现逻辑,因此考虑使用策略模式。
策略模式是一种行为设计模式,它定义了一系列算法,并将每个算法封装到独立的类中,使得它们可以相互替换。
在本项目的场景中,输入的参数是一致的(应用和用户的答案列表),并且每种实现逻辑区别较大,很适合使用策略模式。
tips:
后续可能对文章有所更新,欢迎指正。