demo-empty/README.md
2024-01-08 09:51:08 +08:00

3.4 KiB
Raw Blame History

代码架构

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 的值。

开发规范