forked from rzdata/demo-empty
90 lines
3.4 KiB
Markdown
90 lines
3.4 KiB
Markdown
|
||
## 代码架构
|
||
|
||
```mermaid
|
||
flowchart LR
|
||
demo-service-aaa-->demo-common
|
||
demo-service-bbb-->demo-common
|
||
demo-service-bbb-->demo-sdk
|
||
demo-common-->demo-core
|
||
demo-sdk--> demo-core
|
||
```
|
||
|
||
- demo
|
||
- demo-core
|
||
- demo-sdk
|
||
- demo-common
|
||
- demo-service
|
||
- demo-service-aaa
|
||
- net.rzdata
|
||
- AaaApplication
|
||
- aaa
|
||
- xxx
|
||
- XxxController
|
||
- XxxService
|
||
- XxxRepository
|
||
- service
|
||
- IXxxService4Yyy
|
||
- IXxxService4Zzz
|
||
- mapper
|
||
- XxxMapper
|
||
- domain
|
||
- Xxx
|
||
- XxxAddReq
|
||
- XxxModifyReq
|
||
- yyy
|
||
- zzz
|
||
- demo-service-bbb
|
||
|
||
### 工程结构
|
||
|
||
demo 是一个系统的顶级POM,其 parent 为公司的顶级POM,对系统内部的依赖进行管理。
|
||
|
||
demo-service 下是该系统的全部后端服务,每一个子模块对应一个后端服务。最终发布为一个 Docker 镜像。
|
||
demo-service 的 POM 中添加所有服务的公共依赖,如 spring-boot-starter-web、mybatis-spring-boot-starter 等。
|
||
|
||
demo-common 中为该系统内服务的公共配置、公共接口、异常定义等。
|
||
|
||
demo-sdk 是各服务之间相互调用的 SDK,最终发布为一个 jar 包。
|
||
当 aaa 服务需要调用 bbb 服务时,则引入 demo-sdk 依赖,并使用其中的 BbbClient 进行调用。
|
||
|
||
demo-core 包含本系统内使用的 util 和服务间通信模型 DTO。
|
||
|
||
### 包结构
|
||
|
||
XxxService 是该包的逻辑组织中枢。
|
||
其方法分为 3 部分 —— protected 方法,用于向 XxxController 提供服务;public 方法,是对 service 包中的接口的实现。private 方法,对 protected 方法和 public 方法提供服务。
|
||
如果要依赖其他包的服务,只能注入对应的接口(如 yyy 包需要依赖 xxx 包的服务,则在 YyyService 中注入 IXxxService4Yyy)。IXxxService4Yyy 向其他包提供有限的方法,由 XxxService 实现。
|
||
|
||
XxxController 是向前端提供服务的门面。通常只依赖于 XxxService。
|
||
|
||
domain.Xxx 是该包的核心模型,也是唯一的充血模型。Service 是基于核心模型进行逻辑组织。
|
||
|
||
domain.XxxReq、domain.XxxResp 对应 Controller 中不同请求和响应的返回模型。
|
||
大部分请求是不需要核心模型的全部字段的,比如新增请求不需要id,修改请求有部分字段不可变,不同的请求需要不同的返回字段等,这时可以定义 XxxReq、XxxResp 来实现,并在 Controller 层转换为核心模型。有些请求需要用到完整的核心模型的结构,则可以省略这一步骤。
|
||
|
||
mapper 包下的类均继承自 mybatis-plus 的 BaseMapper,每一个类对应一张数据库表。
|
||
XxxRepository 是对 XxxMapper 的封装。
|
||
|
||
## 部署架构
|
||
|
||
## 如何运行
|
||
|
||
### 本地运行
|
||
|
||
复制服务配置文件 application.yml 中的可配置项到 application-local.yml。
|
||
|
||
在 application-local.yml 中修改配置,其中的配置项会覆盖 application.yml,但不会提交到 git。
|
||
|
||
### 项目发布
|
||
|
||
通过 jib-maven-plugin 发布 Docker 镜像到镜像仓库。
|
||
|
||
### 线上部署
|
||
|
||
将 opentelemetry-javaagent.jar 映射到容器中的 /opt/agent 目录。
|
||
|
||
与本地开发不同,部署时通过环境变量进行配置。application.yml 中有如 ${CONTEXT_PATH} 的可配置项,则能在环境变量中设置 CONTEXT_PATH 的值。
|
||
|
||
## [开发规范](https://github.com/alibaba/p3c)
|