【项目学习01_2024.04.27_Day01】

news/2024/5/10 17:14:42

学习笔记

  • 项目学习链接
  • 第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接口,表示该类的对象可以被序列化,即可以在网络上传输或保存到文件中。



http://www.mrgr.cn/p/61004575

相关文章

vue2 学习笔记

视屏地址:https://www.bilibili.com/video/BV1Zy4y1K7SH?p=14&spm_id_from=pageDriver&vd_source=ad97a93a8a42c9559b03a66114d94d18 vue2 学习笔记: 1. 对象里面写方法,不用写 function 关键字。比如:

一个算法工程师的学习

本系列主要记录在算法工作模型训练过程中一些列用到的技术。训练模型需要学习和积累的知识非常多,在学习了之后会做一个总结,并记录在这里。voc数据集转换成coco数据集

Unity对应的c#版本

本文主要是记录一下unity已经开始兼容c#的版本和.net版本&#xff0c;以便更好的利用c#的特性。 c#和.net对应情况 微软已经将.net开发到.net 9了&#xff0c;但是unity的迭代速度远没有c#迭代速度快&#xff0c;已知unity最新的LTS版本unity2023已经兼容了c#9 可以在unity手册…

车道分割YOLOV8-SEG

车道分割YOLOV8-SEG&#xff0c;训练得到PT模型&#xff0c;然后转换成ONNX&#xff0c;OPENCV的DNN调用&#xff0c;支持C,PYTHON,ANDROID开发 车道分割YOLOV8-SEG

2024/4/27开发

讨论:讨论今天要干什么,但是有一个去陪女朋友去了,剩下两个下午都有一个预选赛,今天事情都很多,就考虑今天停工一天。

指针常量与常量指针

指针常量和常量指针的区别 1.指针常量定义的是一个常量,常量不可改变,因此必须在定义的时候初始化。 2.指针常量不可以改变指针指向的内存地址中的值;常量指针 可以改变指针指向的内存地址中的值。 3.指针常量 可以改变指针指向的内存地址;常量指针不可以改变指针指向的内…

MATLAB矩阵

MATLAB 矩阵 矩阵是数字的二维数组。 在MATLAB中&#xff0c;您可以通过在每行中以逗号或空格分隔的数字输入元素并使用分号标记每行的结尾来创建矩阵。 例如&#xff0c;让我们创建一个45矩阵一- 示例 a [ 1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8] MATLAB将执行上述语…

实验3 :软件测试

一、实验题目 :软件测试 二、实验目的 1、熟悉开发环境下的自动化测试工具; 1、利用自动化测试工具进行自动化单元测试。 三、实验内容 1、选择开发环境,IDEA或PYCHARM任选其一; 2、基于所选择的开发环境实现对输入的n个整数进行排序的代码; 3、对所编写代码设计测试用例;…

浅谈大数据时代下的电商风控||电商数据API接口

抢抢抢&#xff01;最后1天&#xff0c;双十一直播活动来啦&#xff01;抢直播专属优惠…… 视频号 随着大数据时代的兴起&#xff0c;互联网电商风控已经从无风控、人工抽取规则为主的简易规则模型发展到当前基于大数据的风控。与金融风控不同&#xff0c;互联网电商风控呈现出…

《DiffusionNER: Boundary Diffusion for Named Entity Recognition》

Submitted 22 May, 2023; originally announced May 2023. Comments: Accepted to ACL 2023, submission version https://github.com/tricktreat/DiffusionNER 在这里插入图片描述 问题&#xff1a; 命名实体识别任务中存在的噪声跨度&#xff08;边界不清晰&#xff09…

如何通过安全数据传输平台,保护核心数据的安全传输?

在数字化的浪潮中&#xff0c;企业的数据安全传输显得尤为关键。随着网络攻击手段的日益复杂&#xff0c;传统的数据传输方式已不再安全&#xff0c;这就需要我们重视并采取有效的措施&#xff0c;通过安全数据传输平台来保护核心数据。 传统的数据传输面临的主要问题包括&…

HEX文件格式相关

Hex文件是可以烧录到MCU中,被MCU执行的一种文件格式。如果用记事本打开可发现,整个文件以行为单位,每行以冒号开头,内容全部为16进制码(以ASCII码形式显示)。Hex文件可以按照如下的方式进行拆分来分析其中的内容:例如 “:1000080080318B1E0828092820280B1D0C280D2854”可…

【React】CSS 局部样式

书写 CSS 的时候&#xff0c;如果 CSS 文件名包含 module&#xff0c;那么说明该 CSS 是一个局部 CSS 样式文件&#xff0c;类似于 vue 中的 scoped。 .avatarContainer {width: 40px;height: 40px;border-radius: 50%;background: rgb(213, 226, 226); }import styles from ..…

计算机存储原理.2

1.主存储器与CPU之间的连接 2.存储器芯片的输入输出信号 3.增加主存的存储字长 3.1位扩展 数据总线的利用成分是不充分的(单块只能读写一位)&#xff0c;为了解决这个问题所以引出了位扩展。 使用多块存储芯片解决这个问题。 3.2字扩展 因为存储器买的是8k*8位的&am…

python自动化登录(测试篇)

起初是想抓取下请求看能不能做模拟登录。无奈发现&#xff0c;目标网站的请求数据是加密过的&#xff0c;而且网站代码也是编译后的代码。要从编译后的代码中提取加密算法。我的第一想法是明知不可为而不为。但是转念一想&#xff0c;何不试试python大法。 1.前期准备 python我…

贪心算法在单位时间任务调度问题中的应用

贪心算法在单位时间任务调度问题中的应用 一、引言二、问题描述与算法设计三、算法证明四、算法实现与效率分析五、C语言实现示例六、结论 一、引言 单位时间任务调度问题是一类经典的优化问题&#xff0c;旨在分配任务到不同的时间槽中&#xff0c;使得某种性能指标达到最优。…

多模态大模型

想了很久,最后还是写了这篇。 LLaVA 贡献多模态指令数据。当下关键的挑战之一是缺乏视觉与语言组成的指令数据。本文提出了一个数据重组方式,使用 ChatGPT/GPT-4 将图像 - 文本对转换为适当的指令格式; 大型多模态模型。研究者通过连接 CLIP 的开源视觉编码器和语言解码器 L…

27 - 数据传送指令

---- 整理自B站UP主 踌躇月光 的视频 文章目录 1. CPU 电路2. 数据传送指令的几种情况3. 实验工程4. 实验结果 1. CPU 电路 2. 数据传送指令的几种情况 # program.asm; 1. ; MOV A, 5;; 2. ; MOV A, B;; 3. ; MOV A, [5];; 4. ; MOV B, 6 ; MOV A, [B]; 5. ; MOV [0x2f], 5;; …

【Qt 学习笔记】Qt常用控件 | 显示类控件 | Calendar Widget的使用及说明

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt常用控件 | 显示类控件 | Calendar Widget的使用及说明 文章编号&am…

机器学习-K近邻算法-KNN

1 K-紧邻算法简介 1.1 什么是K-近邻算法 直观上理解,就是根据距离的远近来判断你所处于的类别。 但是,也会存在一些问题,距离最近的样本所属于的类别与你需要判断的类别可能不是同一种类别。 1.1 KNN概念 K Nearest Neighbor算法又叫做KNN算法,这个算法是机器学习里面比较经…