学成在线_内容管理模块_创建模块工程

server/2025/1/18 9:29:46/

学成在线模块工程

  • 1.各个微服务依赖基础工程
  • 2.每个微服务都是一个前后端分离的项目
  • 3.xuecheng-plus-content:内容管理模块工程
    • xuecheng-plus-content-model
    • xuecheng-plus-content-service
    • xuecheng-plus-content-api

1.各个微服务依赖基础工程

在这里插入图片描述

2.每个微服务都是一个前后端分离的项目

后端交互主要依赖接口
在这里插入图片描述

一、前端发起请求:1.前端一般通过HTTP协议,向后端的接口层发送请求,接口层的controller接受前端请求。(controller的作用:1解释前端请求,调用业务层的Service进行业务处理)(2接受Service处理后的业务结果,响应给前端)
构建请求信息

前端页面(如HTML页面)通过JavaScript等技术,根据用户的操作(如点击按钮、提交表单等)来构建HTTP请求。请求信息包括请求方法(如GET、POST、PUT、DELETE等),请求URL(指向后端接口的地址),请求头(包含如内容类型、认证信息等),以及请求体(对于POST、PUT等请求,包含要发送给后端的数据,如JSON格式的用户输入数据)。例如,用户在一个电商网站的前端页面上点击“提交订单”按钮,前端JavaScript代码会构建一个POST请求,请求URL可能是/api/orders,请求头中设置Content-Type: application/json,请求体包含订单信息,如商品ID、数量、用户地址等。

发送请求

前端通过浏览器的网络请求接口(如XMLHttpRequest对象或Fetch API)将构建好的HTTP请求发送到后端服务器。这个过程是异步的,前端页面不会因为等待后端响应而停止加载或卡顿,用户可以继续进行其他操作。

二、接口层(Controller)处理请求:2.接口层的controller解析前端请求,转换为后端可以处理的数据格式,调用业务层的service进行业务处理。
接收请求

后端服务器的接口层(Controller)根据配置的路由规则(通常在框架中定义,如Spring MVC的@RequestMapping注解)来接收前端发送的HTTP请求。它会解析请求的URL、请求方法、请求头和请求体等信息。例如,在Spring Boot项目中,一个Controller类中的方法可能用@PostMapping("/api/orders")注解来接收POST请求,当请求URL为/api/orders且请求方法为POST时,该方法就会被触发。

解释请求并调用业务层

Controller将解析后的请求参数(如从请求体中解析出的JSON数据)转换为后端可以处理的数据格式(如Java对象)。然后,它会调用业务层的Service方法,将这些数据作为参数传递给Service,让Service进行具体的业务逻辑处理。以订单提交为例,Controller将请求体中的订单信息JSON字符串转换为Order对象,然后调用OrderService的createOrder(Order order)方法,将Order对象传递过去。

三、业务层(Service)处理业务逻辑:3.业务层service调用持久层的Dao获取数据库中的数据,根据需求编写好处理数据的代码,将根据业务处理好的数据返回给controller。
调用持久层获取数据

Service层根据业务需求,调用持久层的Dao(Data Access Object)来获取数据库中的数据。Dao封装了对数据库的操作细节,如SQL语句的执行等。例如,在处理订单创建业务时,OrderService可能需要调用ProductDao来查询商品库存信息,以判断库存是否足够。ProductDao会执行相应的SQL查询语句,从数据库的Product表中获取商品的库存数据。

处理业务逻辑并返回结果

Service获取到数据库数据后,根据业务规则进行处理。如在订单业务中,如果库存足够,就更新库存信息(可能再次调用ProductDao来执行更新库存的SQL语句),然后生成订单编号等操作,将处理好的订单数据(如订单状态、订单编号等)封装好返回给Controller。如果库存不足,Service会返回一个表示库存不足的错误信息或状态码给Controller。

四、持久层(Dao)操作数据库:4.持久层的Dao读取数据库数据
读取数据库数据

Dao根据Service层的调用,执行SQL查询语句来读取数据库中的数据。它会将查询结果转换为Java对象(如将查询到的Product数据转换为Product对象列表)并返回给Service层。例如,ProductDao执行SELECT * FROM Product WHERE id = ?这样的SQL语句,查询指定ID的商品信息,并将查询结果封装为Product对象返回。

更新数据库数据(如有需要)

除了读取数据,Dao还会根据业务需求执行数据更新操作,如插入新数据(如插入新的订单记录)、更新现有数据(如更新商品库存)或删除数据等。它会执行相应的SQL插入、更新或删除语句,并处理可能的数据库异常情况。

3.xuecheng-plus-content:内容管理模块工程

xuecheng-plus-content:内容管理模块工程,负责聚合xuecheng-plus-content-api、xuecheng-plus-content-service、xuecheng-plus-content-model。
在这里插入图片描述
xuecheng-plus-content-api:接口工程,为前端提供接口。
xuecheng-plus-content-service: 业务工程,为接口工程提供业务支撑。
xuecheng-plus-content-model: 数据模型工程,存储数据模型类、数据传输类型等。

在这里插入图片描述
在这里插入图片描述

在项目根目录创建内容管理模块的父工程xuecheng-plus-content
在这里插入图片描述

内容管理父工程的主要职责是聚合内容管理接口和内容管理接口实现两个工程,它的父工程是 xuecheng-plus-parent。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><artifactId>xuecheng-plus-parent</artifactId><groupId>com.xuecheng</groupId><version>0.0.1-SNAPSHOT</version><relativePath>../xuecheng-plus-parent</relativePath></parent><artifactId>xuecheng-plus-content</artifactId><name>xuecheng-plus-content</name><description>xuecheng-plus-content</description><packaging>pom</packaging><modules><module>xuecheng-plus-content-api</module><module>xuecheng-plus-content-model</module><module>xuecheng-plus-content-service</module></modules>
</project>

xuecheng-plus-content-model

在xuecheng-plus-content下创建xuecheng-plus-content-model数据模型工程。
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><artifactId>xuecheng-plus-content</artifactId><groupId>com.xuecheng</groupId><version>0.0.1-SNAPSHOT</version></parent><artifactId>xuecheng-plus-content-model</artifactId><dependencies><dependency><groupId>com.xuecheng</groupId><artifactId>xuecheng-plus-base</artifactId><version>0.0.1-SNAPSHOT</version></dependency></dependencies></project>

xuecheng-plus-content-service

在xuecheng-plus-content下创建xuecheng-plus-content-service接口实现工程。
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><artifactId>xuecheng-plus-content</artifactId><groupId>com.xuecheng</groupId><version>0.0.1-SNAPSHOT</version></parent><artifactId>xuecheng-plus-content-service</artifactId><dependencies><dependency><groupId>com.xuecheng</groupId><artifactId>xuecheng-plus-content-model</artifactId><version>0.0.1-SNAPSHOT</version></dependency></dependencies>
</project>

xuecheng-plus-content-api

在xuecheng-plus-content下创建xuecheng-plus-content-api接口工程。
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><artifactId>xuecheng-plus-content</artifactId><groupId>com.xuecheng</groupId><version>0.0.1-SNAPSHOT</version></parent><artifactId>xuecheng-plus-content-api</artifactId><dependencies><dependency><groupId>com.xuecheng</groupId><artifactId>xuecheng-plus-content-service</artifactId><version>0.0.1-SNAPSHOT</version></dependency></dependencies></project>

在这里插入图片描述

图表解读
xuecheng-plus-parent:项目父工程,其他模块继承自它,获取通用配置。
xuecheng-plus-base:项目基础工程,可能包含一些基础的工具类或配置,被其他模块继承。
xuecheng-plus-content:可能是一个聚合模块,它继承自父工程,并被其他模块继承。

xuecheng-plus-content-api:接口工程,提供API接口,依赖于数据模型工程和服务工程。
xuecheng-plus-content-service:服务工程,实现业务逻辑,可能依赖于数据模型工程。
xuecheng-plus-content-mode:数据模型工程,定义数据模型,被接口工程和服务工程依赖。
这种结构有助于保持项目的模块化和可维护性,每个模块都有明确的职责和依赖关系。

在软件开发中,特别是在使用如Maven或Gradle这样的构建工具时,"继承"和"依赖"是两个非常重要的概念,它们定义了项目模块之间的关系。在你提供的图表和描述中,这些概念被用来描述不同工程或模块之间的结构关系。

继承
在项目结构中,"继承"通常指的是一个模块继承另一个模块的配置和行为。这类似于面向对象编程中的继承概念,其中子类继承父类的属性和方法。在Maven项目中,一个模块可以继承另一个模块的POM(Project Object Model),这意味着它将自动获得父模块定义的所有配置,如插件、依赖等。
作用:简化配置管理,避免重复定义相同的配置。
示例:在图表中,xuecheng-plus-content模块继承自xuecheng-plus-parent。这意味着xuecheng-plus-content将自动继承xuecheng-plus-parent中定义的所有配置。

依赖
"依赖"指的是一个模块需要另一个模块的代码或资源才能正常工作。在Maven或Gradle中,依赖关系允许一个项目模块使用另一个模块提供的库或服务。
作用:管理模块间的依赖关系,确保模块可以正确地使用其他模块提供的代码。
示例:在图表中,xuecheng-plus-content-api模块依赖于xuecheng-plus-content-mode。这意味着xuecheng-plus-content-api需要xuecheng-plus-content-mode模块中的代码或资源才能正常编译或运行。


http://www.ppmy.cn/server/159318.html

相关文章

Openstack持久存储-Swift,Cinder,Manila三者之间的区别

总结不易&#xff0c;给个三连吧&#xff01;&#xff01;&#xff01; 补充&#xff1a; 文件共享存储服务Manila 在OpenStack生态系统中&#xff0c;Cinder和Manila分别提供了两种不同类型的存储服务&#xff0c;类似于传统的SAN&#xff08;存储区域网络&#xff09;和NAS&…

数据结构(堆)

一.概念及其介绍 1.堆(Heap)是计算机科学中一类特殊的数据结构的统称。 堆就是以二叉树的顺序存储方式来存储元素&#xff0c;同时又要满足父亲结点存储数据都要大于等于儿子结点存储数据&#xff08;也可以是父亲结点数据都要小于等于儿子结点数据&#xff09;的一种数据结构…

从零深度学习:(2)最小二乘法

今天我们从比较简单的线性回归开始讲起&#xff0c;还是一样我们先导入包 import numpy as np import torch import matplotlib as mpl import matplotlib.pyplot as plt a torch.arange(1,5).reshape(2,2).float() a 我们利用刚刚导入的画图的包将这两个点画出来&#xff0…

数据结构-栈队列OJ题

文章目录 一、有效的括号二、用队列实现栈三、用栈实现队列四、设计循环队列 一、有效的括号 (链接&#xff1a;ValidParentheses) 这道题用栈这种数据结构解决最好&#xff0c;因为栈有后进先出的性质。简单分析一下这道题&#xff1a;所给字符串不是空的也就是一定至少存在一…

C# 线程基础之 线程同步

线程同步的手段很多 lock 是通过内存索引块 0 1 切换 进行互斥的实现 互斥量 信号量 事件消息 其实意思就是 一个 标记量 通过这个标记 来进行类似的互斥手段 具体方式的分析 代码在后 1.互斥量 Mutex 作用 非常类似lock 一个Mutex 名称来代替 lock的引用对象 2.信号量 Semaph…

ASP.Net Identity + IODC 解析ReturnUrl

Identity Ids4 配置 成认证服务 一、创建 Identity身份验证 项目 创建的项目结构中 没有 注册和登录的 控制器和视图 配置数据库地址 》》默认已经生成了Miagratin 直接update-database 二、在Identity项目 配置 IdentityServer4 Nuget 两个包 》》》配置Config 类 usin…

鸿蒙Flutter实战:16-无痛开发指南(适合新手)

本文讲述如何通过 Flutter 开发鸿蒙原生应用。整个过程结合往期文章、实战经验、流程优化&#xff0c;体验丝滑、无痛。 无痛搭建开发环境 为了减少疼痛&#xff0c;这里使用全局唯一的 Flutter 版本开发。高阶用法可以参看往期同系列文章。 硬件准备 一台 Mac&#xff0c;一部…

当设置dialog中有el-table时,并设置el-table区域的滚动,看到el-table中多了一条横线

问题&#xff1a;当设置dialog中有el-table时&#xff0c;并设置el-table区域的滚动&#xff0c;看到el-table中多了一条横线&#xff1b; 原因&#xff1a;el-table有一个before的伪元素作为表格的下边框下&#xff0c;初始的时候已设置&#xff0c;在滚动的时候并没有重新设置…