学习笔记
- 项目学习链接
- 第2章 内容管理模块v3.1
- 1 模块需求分析
- 1.1 什么是需求分析
- 1.2 模块介绍
- 1.3 业务流程
- 1.4 界面原型
- 2 创建模块工程
- 2.1 模块工程结构
- 父工程和子工程之间的继承关系以及工程与工程之间的依赖关系,通俗理解:
- 2.2 创建模块工程
- \pom\含义及其功能
- 3 课程查询
- 3.1 需求分析
- 3.1.1 业务流程
- 3.1.2 数据模型
- 3.2 创建数据库表及PO类型
- 3.2.1 创建数据库表
- 3.2.2 生成PO类
- 3.3 设计接口
- 3.3.1 接口设计分析
- 3.3.2 定义模型类
项目学习链接
第2章 内容管理模块v3.1
1 模块需求分析
1.1 什么是需求分析
在软件工程中,需求分析是软件开发过程中的一个重要阶段,其主要目的是确定用户的需求和期望,将用户的需求转化为可实现的软件功能和规格。需求分析阶段涉及收集、定义、分析和确认用户需求,并将其转化为软件系统的规格说明书,为软件设计和开发提供指导。
需求分析就好比是在买东西之前先确定清楚自己到底需要什么,要买什么样的东西。
比如,你想买一台新手机,你会先考虑自己的需求,比如想要大屏幕、长续航、高像素等功能。
这些需求就相当于软件开发中的用户需求。然后,你会去市场上了解各种手机品牌和型号,比较它们的功能和性能,选择最符合自己需求的手机。这个过程就相当于软件开发中的需求分析,通过和用户沟通、调研市场等方式,确定用户的需求,为后续的软件设计和开发提供指导。
最后,你会购买到符合自己需求的手机,满足了自己的使用需求。而在软件开发中,通过需求分析确定了用户需求后,开发团队就可以按照需求设计和开发出符合用户期望的软件产品,从而实现用户满意度和软件项目的成功。
1.2 模块介绍
本项目作为一个大型的在线教育平台,其内容管理模块主要对课程及相关内容进行管理,包括:课程的基本信息、课程图片、课程师资信息、课程的授课计划、课程视频、课程文档等内容的管理。
1.3 业务流程
1.4 界面原型
产品工程师根据用户需求制作产品界面原型,开发工程师除了根据用户需求进行需求分析以外,还会根据界面原型上的元素信息进行需求分析。
2 创建模块工程
2.1 模块工程结构
所以模块工程的结构如下图所示:
xuecheng-plus-content-api:接口工程,为前端提供接口。
xuecheng-plus-content-service: 业务工程,为接口工程提供业务支撑。
xuecheng-plus-content-model: 数据模型工程,存储数据模型类、数据传输类型等。
结合项目父工程、项目基础工程后,如下图:
父工程和子工程之间的继承关系以及工程与工程之间的依赖关系,通俗理解:
假设你正在建造一座房子,你可以把这个过程比作一个软件项目。在这个过程中,你可能会有一个总的施工图纸,上面包含了整个房子的设计和规划,这个施工图纸就相当于Spring Boot项目中的父工程。
然后,你需要对房子的不同部分进行施工,比如地基、结构、装修等。你可以把每个部分的施工过程看作是一个子工程,每个子工程都有自己的施工图纸,规定了这部分工程的具体要求和设计。
在这个过程中,每个子工程都要遵循总的施工图纸(父工程)的规定,比如地基要承重、结构要牢固、装修要美观。这就是父工程和子工程之间的继承关系,子工程继承了父工程的设计和规划。
此外,有些部分的施工可能依赖于其他部分,比如装修需要等到结构完工后才能开始。这就是工程与工程之间的依赖关系,一个部分的施工依赖于其他部分的完成。
在Spring Boot项目中,父工程提供了一些通用的配置和依赖,子工程可以继承父工程的配置和依赖,同时根据自己的需求进行定制。工程与工程之间的依赖关系则是指不同模块之间的依赖,比如一个模块可能需要调用另一个模块提供的功能。
2.2 创建模块工程
1、首先在项目根目录创建内容管理模块的父工程xuecheng-plus-content
创建完成,只保留pom.xml文件,删除多余的文件。
内容管理父工程的主要职责是聚合内容管理接口和内容管理接口实现两个工程,它的父工程是xuecheng-plus-parent。
<packaging>pom</packaging>含义及其功能
在Maven项目中,
<packaging>pom</packaging>
是用来指定项目的打包方式的配置。通俗地讲,它告诉Maven这个项目不是一个可执行的JAR或WAR包,而是一个用来管理其他子模块的父项目。
具体来说,当一个项目的<packaging>
配置为pom
时,这个项目就是一个聚合项目(aggregator project),它主要用来管理多个模块(子项目),而不会生成任何实际的构建产物(如JAR、WAR等)。这样的父项目通常包含了一些共享的配置、依赖管理等内容,子项目可以继承这些共享内容,从而减少重复工作。
在Maven中,父项目的pom.xml文件中通常会包含一些全局的配置,比如依赖管理、插件配置、版本控制等,子项目则可以继承这些配置,避免重复定义。同时,父项目也可以定义一些聚合的关系,将多个子项目组织在一起,方便统一管理和构建。
总的来说,<packaging>pom</packaging>
的作用是告诉Maven这个项目是一个父项目,用来管理多个子项目的配置和依赖关系,而不是生成可执行的构建产物。这样可以提高项目的组织结构和管理效率。
3 课程查询
3.1 需求分析
3.1.1 业务流程
课程查询的业务流程如下:
1、教学机构人员点击课程管理首先进入课程查询界面,如下:
2.在课程进行列表查询页面输入查询条件查询课程信息
当不输入查询条件时输入全部课程信息。
输入查询条件查询符合条件的课程信息。
约束:本教学机构查询本机构的课程信息。
3.1.2 数据模型
下边从查询条件、查询列表两个方面分析数据模型
1、查询条件:
包括:课程名称、课程审核状态、课程发布状态
课程名称:可以模糊搜索
课程审核状态:未提交、已提交、审核通过、审核未通过
课程发布状态:未发布、已发布、已下线
因为是分页查询所以查询条件中还要包括当前页码、每页显示记录数。
2、查询结果:
查询结果中包括:课程id、课程名称、任务数、创建时间、是否付费、审核状态、类型,操作
任务数:该课程所包含的课程计划数,即课程章节数。
是否付费:课程包括免费、收费两种。
类型:录播、直播。
因为是分页查询所以查询结果中还要包括总记录数、当前页、每页显示记录数。
3.2 创建数据库表及PO类型
3.2.1 创建数据库表
1、创建内容管理数据库
2、向创建的内容管理数据库导入数据
选择课程资料中的xc_content.sql脚本,这里使用DataGrid 客户端工具连接mysql并执行脚本。
执行成功,查询course_base数据表,如下:
3.2.2 生成PO类
PO即持久对象(Persistent Object),也称为实体类(Entity Class)或数据访问对象(Data Access Object)。它们是由一组属性和属性的get和set方法组成,PO对应于数据库的表。
在开发持久层代码时需要根据数据表编写PO类,在实际开发中通常使用代码生成器(工具)生成PO类的代码。
本项目使用mybatis-plus的generator工程生成PO类、Mapper接口、Mapper的xml文件,地址在:https://github.com/baomidou/generator
将课程资料目录下的xuecheng-plus-generator.zip解压后拷贝至项目工程根目录,如下图:
打开IDEA将其导入项目工程 ,打开xuecheng-plus-generator工程的pom.xml,右键 点击“Add as Maven Project” 自动识别maven工程。
本次生成内容管理模块的PO类、Mapper接口和Mapper的xml文件 ,找到ContentCodeGenerator类,如下图:
修改ContentCodeGenerator类中的信息,包括:数据库地址、数据库账号、数据库密码、生成的表、生成路径。
修改完成,执行该类的main方法,自动生成content包,如下:
在该包下自动生成了内容管理模块的controller、mapper、po及service相关代码,这里我们只需要po类。
将po类拷贝到model工程。
打开一个PO类发现编译报错,这是缺少依赖包导致,本项目使用的持久层框架是MyBatisPlus,在生成的po类中加了一些MyBatisPlus框架的注解,这里需要添加MyBatisPlus框架的依赖,消除错误。
下边在model工程添加依赖
<dependencies>
<dependency>
<groupId>com.xuecheng</groupId>
<artifactId>xuecheng-plus-base</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!--存在mybatisplus注解添加相关注解保证不报错-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-annotation</artifactId>
<version>${mybatis-plus-boot-starter.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-core</artifactId>
<version>${mybatis-plus-boot-starter.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
${mybatis-plus-boot-starter.version} 表示用mybatis-plus-boot-starter.version值(父工程中为3.4.1)替换此处,使版本一致。
3.3 设计接口
3.3.1 接口设计分析
1)协议
通常协议采用HTTP,查询类接口通常为get或post,查询条件较少的使用get,较多的使用post。
本接口使用 http post。
还要确定content-type,参数以什么数据格式提交,结果以什么数据格式响应。
一般情况没有特殊情况结果以json 格式响应。
2)分析请求参数
根据前边对数据模型的分析,请求参数为:课程名称、课程审核状态、当前页码、每页显示记录数。
根据分析的请求参数定义模型类。
3)分析响应结果
根据前边对数据模型的分析,响应结果为数据列表加一些分页信息(总记录数、当前页、每页显示记录数)。
数据列表中数据的属性包括:课程id、课程名称、任务数、创建时间、审核状态、类型。
注意:查询结果中的审核状态为数据字典中的代码字段,前端会根据审核状态代码 找到对应的名称显示。
根据分析的响应结果定义模型类。
4)分析完成,使用SpringBoot注解开发一个Http接口。
5)使用接口文档工具查看接口的内容。
6)接口中调用Service方法完成业务处理。
接口请求示例
POST /content/course/list?pageNo=2&pageSize=1
Content-Type: application/json
{
"auditStatus": "202002",
"courseName": "",
"publishStatus":""
}
###成功响应结果
{
"items": [
{
"id": 26,
"companyId": 1232141425,
"companyName": null,
"name": "spring cloud实战",
"users": "所有人",
"tags": null,
"mt": "1-3",
"mtName": null,
"st": "1-3-2",
"stName": null,
"grade": "200003",
"teachmode": "201001",
"description": "本课程主要从四个章节进行讲解: 1.微服务架构入门 2.spring cloud 基础入门 3.实战Spring Boot 4.注册中心eureka。",
"pic": "https://cdn.educba.com/academy/wp-content/uploads/2018/08/Spring-BOOT-Interview-questions.jpg",
"createDate": "2019-09-04 09:56:19",
"changeDate": "2021-12-26 22:10:38",
"createPeople": null,
"changePeople": null,
"auditStatus": "202002",
"auditMind": null,
"auditNums": 0,
"auditDate": null,
"auditPeople": null,
"status": 1,
"coursePubId": null,
"coursePubDate": null
}
],
"counts": 23,
"page": 2,
"pageSize": 1
}
3.3.2 定义模型类
根据接口分析需要定义模型类接收请求的参数,并定义模型类用于响应结果。
1、分页查询模型类
由于分页查询这一类的接口在项目较多,这里针对分页查询的参数(当前页码、每页显示记录数)单独在xuecheng-plus-base基础工程中定义。
2、查询条件模型类
除了分页查询参数,剩下的就是课程查询的特有参数,此时需要在内容管理的model工程中定义课程查询参数模型类。
3、响应模型类
根据接口分析,下边定义响应结果模型类。
针对分页查询结果经过分析也存在固定的数据和格式,所以在base工程定义一个基础的模型类。
implements Serializable:这个类实现了Serializable接口,表示该类的对象可以被序列化,即可以在网络上传输或保存到文件中。