学成在线项目总结 - Day1 CMS服务端搭建

这个项目是模仿一个在线教育网站,使用spring boot 和 spring cloud 来搭建的一个实践项目。我跟着黑马程序员的网课进行学习,将历时20天。

架构图

学成在线项目 - Day1

网站分为五个板块:

  • 门户,一个访问学成在线内容的入口
  • 学习中心,为学生提供学习功能的平台
  • 教学管理中心,为老师提供教学管理的平台
  • 社交系统,为师生交流提供一个交互的平台
  • 系统管理中心,为系统管理员维护管理系统运行

技术架构

学成在线项目总结 - Day1

使用前后端分离架构开发,分层设计,每一层承担不同职责。

  • 前后端分离的好处:将代码分为若干个前后工程,可以将不同的小工程分别部署。

看到技术架构图的时候,还是有点被吓到的,虽然条理清晰,分层清楚,但是每层涉及到的内容实在太多,有点看不过来。想到去年暑假自己在小公司实习时做的一个考勤管理系统,实在是太小儿科了。希望做完这个项目之后能够反思一下之前项目的不足,以便在面试中不被问倒。。

看完之后感觉还是很清晰的。作为Java后端工程师,需要重点掌握微服务层和数据层的一些技术。

用户层

面向不同方式访问的用户。如PC,APP,H5.

CDN (内容分发网络)

是一个缓存层,缓存静态资源,提高用户的访问效率。

负载均衡

Nginx属于这一层。由于之后的层有很多不同功能的系统,使用负载均衡,可以将用户的需求平均分摊到各个不同的节点。

UI层

实现用户界面,是前后端分离中的前端。针对不同用户,开发出不同的界面。和微服务层相互独立,通过网络协议进行通信。

微服务层**

一套统一的供前端访问的服务。利于系统的可扩展性,可维护性。从结构图中可以看到,微服务层把功能细分,提高了服务的可独立性。每一块功能独立部署,可以根据具体需求独立开发某一块功能。

数据层*

供微服务层访问,微服务层会将数据持久化到数据库。使用到了Mysql和MongoDB以及其他一些。

其他的一些层

DevOps: 用于系统开发运维的工具,git, docker, spring cloud 等
外部系统接口:第三方登录,邮件等

技术栈

学成在线项目总结 - Day1

以上是后端需要重点掌握的技术栈。

开发步骤

  • 需求分析
  • 接口定义
  • 服务端和前端并行开发
  • 前后端集成测试

CMS 需求分析

CMS是一个内容管理系统。不同项目具体定位不同。对于这个项目,CMS系统将对各个网站页面进行管理,根据不同内容快速进行页面开发,上线。

准备工作

  • 下载安装 WebStorm
  • 下载启动 Nginx
    • 说明:使用Nignx时需要使用命令行开启和终止服务。终止服务时,如果使用 git bash 的话,需要在 nginx 命令前加 ./,否则会报 command not found 错误。(这个错误折磨了我好久)看这里
  • 搭建静态门户工程
    • 由于前端代码已经搭建,直接导入WebStorm即可。
    • 在nginx文件夹里配置虚拟主机,以便通过前端工程路径用浏览器访问页面
    • 在windows的C:\Windows\System32\drivers\etc\host中添加一个域名,使得输入自定义网址也可以访问前端界面

SSI技术

SSI技术,Server Side Include,服务端包含。
主页面包含很多板块,比如导航栏,侧边栏,轮播图等等。我们可以将这些内容分为一个个小的板块,再用Ngnix支持的SSI技术把这些板块拼装到主页面上。

使用服务端包含技术,可以更方便管理不同板块小页面内容。

  • 具体使用:
    • 在Nginx配置文件中开启SSI支持
      ssi on;
      ssi_silent_errors on;
    • 在需要添加小版块的界面使用 <!--#include virtual="/include/header.html"-->添加小版块的内容

页面管理需求

  • 创建站点
    • 主站点,子站点。确定好之后,才能确定不同页面的归属
  • 创建模板
    • 很多页面的布局,版式相同,不同的只是其中的内容。通过创建模板,以及对其中内容的填充,可以提升页面构建的效率。
  • 创建页面
  • 页面预览
  • 页面发布

导入工程

  • 使用JDK1.8版本,并且将编码格式统一为UTF-8
  • 分别导入父工程和其他基础工程,我们未来新建的微服务工程都可以依赖基础工程
  • 导入基于MongoDB的CMS数据

模型定义*

需求分析

以定义页面查询为例,我们有如下需求:

  • 分页查询MongoDB数据库中cms_page集合下的数据
  • 根据站点Id、模板Id、页面别名查询页面信息
  • 接口基于Http Get请求,响应Json数据(使用Spring MVC中的方法)

三种模型类:
CmsSite - 站点模型
CmsTemplate - 页面模板
CmsPage - 页面信息。定义一个页面需要定义其所属的站点和使用的模板。

以上三个模型类位于..\xc-framework-model\src\main\java\com\xuecheng\framework\domain\cms中,并使用到了三个注解:
- @Data,@ToString 是 Lombok 提供的注解,编译时自动生成成员变量 getter/setter 以及 toString 方法。
- @Document 和 MongoDB 数据库中的对应表格建立连接

接口定义*?(重点理解)

我们要开发页面查询服务端,需要先定义一个页面查询接口。
我们需要定义一个请求模型QueryPageRequest,使其继承 RequestData 用来识别接口请求响应的数据模型。

接下来接口的定义将在api工程下创建,这样可以使接口集中管理,使之后的微服务调用接口时更加方便。

所有列表查询结果的接口,返回值都要定义为QueryResponseResult,因为QueryResponseResult继承了ResponseResult,会返回一个列表和查询结果信息。

如何定义一个接口?

  • 明确需求:请求什么?响应什么?由此定义一个模型
  • 定义模型类响应接口

在定义完成接口后,我们需要新建一个微服务工程编写此接口的实现类。

页面查询服务端开发*

这是今天开发的重中之重,所有的开发步骤也将在之后经常用到,所以需要熟练理解掌握。

前面的工作以及创建好了所需的接口,于是我们现在可以创建一个新的基于 spring boot 的 maven 工程,来实现接口的功能,这个工程的父工程是 xc‐framework‐parent 。

开发步骤及注意事项如下:

1. 在pom.xml中添加所需依赖

2. 配置 application.yml 来提供链接 MongoDB 的配置信息,并添加logback-spring.xml作为日志配置信息

3. 创建 SpringBoot 启动类

  • 这个启动类需要在所建工程的根目录下,这样才可以扫描到同级别包的类及其子类。
  • 使用@SpringBootApplication表示这是一个启动类
  • 使用@EntityScan扫描 com.xuecheng.framework.domain.cms下的实体类,使用@ComponentScan扫描 com.xuecheng.framework.api 接口
  • 注意主方法中运行SpringBoot调用的是SpringApplication中的run方法,而不是SpringBootApplication。这个错误使我耽误了十几分钟。

    4. 定义Dao中的分页查询接口

  • 由于我们使用MongoDB作为分页查询的数据库,我们要使持久层接口继承MongoRepository,并定义其实体类型和主键类型分别为CmsPage和String。
  • 在接口中添加成员方法,我们也可以根据findByXXX,findByXXXAndYYY、countByXXXAndYYY等规则自定义方法
  • 定义完成后,可以在测试类中编写测试代码来测试接口

    5. 在Controller中创建业务层实现类

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!