1.内容管理

1.1内容管理是什么?(面试)

内容管理系统(content management system ),是协助组织和个人,借助信息技术,实现内容的创建、储存、分享、应用、检索,并在企业个人、组织、业务、战略等诸方面产生价值的过程 。能够支撑内容管理的一种工具或一套工具的软件系统。 不同的项目对内容的定位不同,比如:新闻媒体对新闻信息的管理,公司管理对公司内部数据内容管理、物流对订单内容管理等。
总结:CMS, 使用计算机技术来管理行业内相关数据
本项目作为一个大型的在线教育平台,其内容管理主要对课程相关内容进行管理,从课程数据的录入、课程审批、课程内容发布等内容性的业务需求数据进行管理。

1.2内容管理数据模型

学成在线数据结构图
二、课程查询和新增 - 图1
内容管理数据模型
二、课程查询和新增 - 图2

1.2业务介绍(面试)

教育机构通过内容管理,可以添加课程内容,添加课程计划,添加课程教师信息。
二、课程查询和新增 - 图3
1、课程内容:包括课程的基本信息课程营销
2、课程计划:包括课程授课的主体大纲和关联的大纲的资料。
3、课程教师:包括课程授课的教师信息(课程不讲解,留作课程作业)。

1.3业务流程(面试)

image.png

1.3.1课程内容管理

1.教育机构用户在门户管理界面中的课程管理链接进入课程管理界面。
2.在管理界面中可以对课程进行列表查询和管理。
3.添加课程时选在课程的类型。
4.选择课程类型后,添加课程基本信息和课程营销数据。
总结:教育机构从在线平台通过门户管理界面进入课程管理界面,在管理界面中查询、管理、添加课程信息。

1.3.2课程计划管理

  1. 对课程基本信息保存后,填写课程计划,如果课程有课程计划需要将其查询出来。
    2 对新课程没有课程计划,需要填写课程计划大章节。
    3 在课程计划大章节下填写课程小章节。
    总结:填写完基本信息后,填写课程计划,若有则查询,若无则填写课程大章节、小章节。

    1.3.3课程教师管理

  2. 保存课程计划,对课程的教师进行管理,如果课程有教师信息需要查询出来,并对课程的教师进行管理

2.接口开发规范

2.1接口路径规范

2.1.1.HTTP 请求方式规范

  • GET 请求(SELECT):从服务器取出资源(一项或多项)
  • POST请求(CREATE):在服务器新建一个资源
  • PUT 请求(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)
  • DELETE 请求(DELETE):从服务器删除资源

    2.1.2.HTTP 请求地址

    由于 HTTP 请求路径使用 Restful 风格,URI 中尽量避免使用动词,单词之间可以以中划线”-“分割

    2.2接口数据规范

    2.2.1.HTTP 服务端接收参数的封装

    Controller接收前端的参数种类:

  • 查询操作

    • 分页类和多个条件参数分页数据要使用 PageRequestParam 实体类,并通过 QueryString 的方式进行传入参数。条件查询对象封装到以 Query*Model 类中,并且条件查询数据要通过请求体以传递 json 格式来进行传递。请求方式有 Get 请求改为 Post请求。
  • 其他操作

    • 新增和修改对于服务端控制层接收前端参数,Controller 层中方法声明的传入参数建议封装到 VO 对象中。
    • 删除删除一般前端只需要出入删除数据的 Id 值即可。

      2.2.2.HTTP响应数据

  • 响应数据格式为:Json

  • 对于CRUD操作,通常返回直接数据
    • 新增和修改操作—返回保存/修改后的完整数据
    • 删除—无返回数据
    • 查询操作
      • 查询单个数据:返回单个完整数据。
      • 查询分页数据:要使用 PageVO 对象来返回 总条数、当前页、每页条数、当前页的集合数据。

        2.2.3.异常错误数据

        如果前端调用微服务端获得错误数据,错误数据需要包含:错误代码、错误信息。

3.前后端开发步骤(面试)

1.需求分析
2.接口定义
3.服务端和前端并行开发
4.前后端集成测试
后端重点:

  • 功能的业务流程和分析
  • 后端接口定义
  • 后端微服务的开发
  • 后端接口的测试
  • 前后端集成测试

4.DTO

4.1PO、DTO是什么?

PO:对于数据库中的表来说,开发工程中会定义一个类来描述这张表的结构,这个类一般称之为 PO(persistent Object)持久对象。
DTO(Data Transfer Object,数据传送对象) 是一个普通的Java类,它封装了要传送的数据。当前端需要读取服务器端的数据的时候,服务器端将数据封装在DTO中,这样前端就可以获得它需要的所有数据。
意义:由于 DTO 中的属性都是前端所需要的。相比 PO 来说,属性会精简,这样在转换 Json 时,效率会好。
DTO 中的属性名称可以定义和 PO 属性名称不一致,这样前端工程获得 DTO 对象中的数据,其属性名称不一致,从而提高了应用的安全性。

5.nacos的配置隔离和公共配置

5.1nacos中的环境

●Namespace:代表不同环境,如开发、测试、生产环境。
●Group:代表某项目,如XX医疗项目、XX电商项目
●DataId:每个项目下往往有若干个工程,每个配置集(DataId)是一个工程的主配置文件
●profile: 在同一个环境下有不同的配置
创建内容:
①.在项目中我们需要创建出多个 Namespace 环境
②.指定组的名称
③.根据spring.application.name来指定Data Id 值

5.1.1.在开发环境创建groupid

二、课程查询和新增 - 图5

5.1.2.公共配置

  • mp全局配置

    1. #驼峰下划线转换
    2. mybatis-plus.global-config.db-column-underline = true
    3. #实体扫描,多个package用逗号或者分号分隔
    4. mybatis-plus.typeAliasesPackage = com.xuecheng.*.entity
    5. #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
    6. mybatis-plus.global-config.field-strategy=2
    7. #全局地开启或关闭配置文件中的所有映射器已经配置的任何缓存,开发时不需要开启。
    8. mybatis-plus.configuration.cache-enabled = false
    9. #映射文件mapper文件存储位置
    10. mybatis-plus.mapper-locations = classpath:com.xuecheng.*.mapper/*.xml
    11. #主键类型 0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
    12. mybatis-plus.global-config.id-type = 0
    13. #刷新mapper 调试神器
    14. mybatis-plus.global-config.refresh-mapper = true

    image.png

  • spring-http-config.properties 配置

    1. #srpingboot http 配置信息
    2. spring.http.encoding.enabled = true
    3. spring.http.encoding.charset = UTF-8
    4. spring.http.encoding.force = true
    5. server.use-forward-headers = true
    6. server.servlet.context-path = /
    7. server.port=8888

    image.png

  • spring-druid-config.properties 配置

    1. #spring druid 配置信息
    2. spring.datasource.driver-class-name = com.mysql.jdbc.Driver
    3. spring.datasource.url = jdbc:mysql://ip:3306/xc_content?userUnicode=true&useSSL=false&characterEncoding=utf8
    4. spring.datasource.password = root
    5. spring.datasource.username = root
    6. #初始化连接池的的连接数据量
    7. spring.datasource.druid.initial-size = 5
    8. #连接池最小连接数
    9. spring.datasource.druid.min-idle = 5
    10. #获取连接等待超时时间
    11. spring.datasource.druid.max-wait = 60000
    12. # 要启用PreparedStatementCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。
    13. spring.datasource.druid.max-pool-prepared-statement-per-connection-size = 20
    14. #连接池中最大激活连接数
    15. spring.datasource.druid.max-active = 20

    image.png

  • 在 Nacos 的 dev 命名空间 下 content-service-dev.properties 添加配置信息

    1. #spring http 配置信息
    2. server.servlet.context-path = /content
    3. server.port=63040
    4. #spring druid 配置信息
    5. spring.datasource.url = jdbc:mysql://192.168.94.129:3306/xc_content?userUnicode=true&useSSL=false&characterEncoding=utf8


    image.png

    5.2工程引入配置

    1.导入依赖

    1. <!-- spring cloud nacos -->
    2. <dependency>
    3. <groupId>com.alibaba.cloud</groupId>
    4. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    5. </dependency>
    6. <dependency>
    7. <groupId>com.alibaba.cloud</groupId>
    8. <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    9. </dependency>
    10. <!-- druid 配置 -->
    11. <dependency>
    12. <groupId>com.alibaba</groupId>
    13. <artifactId>druid-spring-boot-starter</artifactId>
    14. </dependency>

    2.创建 bootstrap.yml 文件

    1. #微服务配置
    2. spring:
    3. application:
    4. name: content-service
    5. jackson:
    6. date-format: yyyy-MM-dd HH:mm:ss
    7. time-zone: GMT+8
    8. cloud:
    9. nacos:
    10. discovery:
    11. server-addr: 192.168.94.129:8848 #注册中心nacos地址
    12. namespace: 修改为nacos dev 环境的id #dev环境的namespace配置
    13. group: ${dev.group}
    14. config:
    15. server-addr: 192.168.94.129:8848 #配置中心nacos地址
    16. namespace: 修改为nacos dev 环境的id #dev环境的namespace配置
    17. file-extension: properties #文件的后缀名称
    18. group: ${dev.group}
    19. shared-configs:
    20. - dataId: mp-config.properties
    21. group: ${dev.group}
    22. - dataId: spring-http-config.properties
    23. group: ${dev.group}
    24. - dataId: spring-druid-config.properties
    25. group: ${dev.group}
    26. profiles:
    27. active: dev #开启开发环境配置
    28. #配置开发组的名称
    29. dev:
    30. group: xc-group
    31. # 日志文件配置路径
    32. logging:
    33. config: classpath:log4j2-dev.xml
    34. # swagger 文档配置
    35. swagger:
    36. title: "学成在线内容管理系统"
    37. description: "内容系统管理系统对课程相关信息进行业务管理数据"
    38. base-package: com.xuecheng
    39. enabled: true
    40. version: 1.0.0

    3.启动类添加注解驱动

    1. @RefreshScope //开启动态刷新
    2. @EnableDiscoveryClient //开启注册中心
    3. @EnableSwagger2Doc //开启swagger
    4. @SpringBootApplication
    5. public class ContentApplication {
    6. public static void main(String[] args) {
    7. SpringApplication.run(ContentApplication.class, args);
    8. }
    9. }