02-项目结构规范.md 11 KB

项目结构规范

概述

本项目采用Maven作为构建工具,遵循标准的Maven目录结构。项目基于Spring Boot框架开发,使用Java 17作为开发语言。项目包名为work.baiyun.chronicdiseaseapp

根目录结构

ChronicDiseaseApp/
├── pom.xml                          # Maven项目配置文件
├── src/                             # 源代码目录
│   ├── main/                        # 主源代码
│   │   ├── java/                    # Java源代码
│   │   │   └── work/baiyun/chronicdiseaseapp/  # 主包
│   │   │       ├── SpringAPP.java   # Spring Boot 主启动类(@EnableKnife4j)
│   │   │       ├── common/          # 通用类
│   │   │       │   ├── Page.java    # 分页类(PageHelper 封装)
│   │   │       │   └── R.java       # 统一响应类
│   │   │       ├── config/          # 配置类
│   │   │       │   ├── AuthInterceptor.java      # 认证拦截器
│   │   │       │   ├── CorsConfig.java           # CORS 配置
│   │   │       │   ├── Knife4jConfig.java        # Knife4j 配置
│   │   │       │   ├── MybatisPlusConfig.java    # MyBatis-Plus 配置
│   │   │       │   ├── RestTemplateConfig.java   # RestTemplate 配置
│   │   │       │   ├── WebMvcConfig.java         # Web MVC 配置(拦截器注册)
│   │   │       │   └── WeChatProperties.java     # 微信配置属性
│   │   │       ├── controller/     # 控制器层
│   │   │       │   ├── GeoController.java        # 地理位置控制器
│   │   │       │   ├── WeChatController.java     # 微信控制器
│   │   │       │   ├── BloodGlucoseDataController.java  # 血糖数据控制器
│   │   │       │   ├── BloodPressureDataController.java # 血压数据控制器
│   │   │       │   ├── HeartRateDataController.java     # 心率数据控制器
│   │   │       │   └── PhysicalDataController.java      # 体征数据控制器
│   │   │       ├── enums/          # 枚举类
│   │   │       │   ├── ExceptionResultCode.java  # 异常结果码枚举
│   │   │       │   ├── FailResultCode.java       # 失败结果码枚举
│   │   │       │   ├── Gender.java               # 性别枚举
│   │   │       │   ├── PermissionGroup.java      # 权限组枚举
│   │   │       │   ├── SuccessResultCode.java    # 成功结果码枚举
│   │   │       │   └── BloodGlucoseType.java     # 血糖类型枚举
│   │   │       ├── exception/     # 异常处理
│   │   │       │   ├── CustomException.java      # 自定义异常(RuntimeException)
│   │   │       │   └── CustomExceptionHandler.java # 全局异常处理器
│   │   │       ├── handler/       # MyBatis 处理器
│   │   │       │   ├── CustomMetaObjectHandler.java  # 元对象处理
│   │   │       │   ├── GenderTypeHandler.java        # 性别类型处理
│   │   │       │   └── PermissionGroupTypeHandler.java # 权限组类型处理
│   │   │       ├── mapper/        # 数据访问层(Mapper 接口)
│   │   │       │   ├── SysUserMapper.java       # 系统用户Mapper
│   │   │       │   ├── UserInfoMapper.java      # 用户信息Mapper
│   │   │       │   ├── UserTokenMapper.java     # 用户令牌Mapper
│   │   │       │   ├── BloodGlucoseDataMapper.java # 血糖数据Mapper
│   │   │       │   ├── BloodPressureDataMapper.java# 血压数据Mapper
│   │   │       │   ├── HeartRateDataMapper.java     # 心率数据Mapper
│   │   │       │   └── PhysicalDataMapper.java      # 体征数据Mapper
│   │   │       ├── model/        # 数据模型
│   │   │       │   ├── bo/       # 业务对象
│   │   │       │   ├── po/       # 持久化对象(实体)
│   │   │       │   │   ├── BaseEntity.java      # 基础实体
│   │   │       │   │   ├── UserInfo.java        # 用户信息实体
│   │   │       │   │   ├── UserToken.java       # 用户令牌实体
│   │   │       │   │   ├── BloodGlucoseData.java # 血糖实体
│   │   │       │   │   ├── BloodPressureData.java# 血压实体
│   │   │       │   │   ├── HeartRateData.java    # 心率实体
│   │   │       │   │   └── PhysicalData.java     # 体征实体
│   │   │       │   └── vo/       # 视图/请求响应对象
│   │   │       │       ├── GetOpenidRequest.java     # 获取OpenID请求
│   │   │       │       ├── QueryUserRequest.java     # 查询用户请求
│   │   │       │       ├── QueryUserResponse.java    # 查询用户响应
│   │   │       │       ├── UpdateUserInfoRequest.java # 更新用户信息请求
│   │   │       │       ├── AuthPrincipal.java         # 鉴权主体(userId, role)
│   │   │       │       └── 各类数据请求/响应 VO(如 BloodPressureDataResponse 等)
│   │   │       ├── service/      # 服务接口
│   │   │       │   ├── TokenService.java       # 令牌服务接口
│   │   │       │   ├── UserService.java        # 用户服务接口
│   │   │       │   ├── WeChatService.java      # 微信服务接口
│   │   │       │   └── impl/     # 服务实现
│   │   │       │       ├── TokenServiceImpl.java   # 令牌服务实现
│   │   │       │       ├── UserServiceImpl.java    # 用户服务实现
│   │   │       │       ├── BloodGlucoseDataServiceImpl.java # 血糖服务实现
│   │   │       │       ├── BloodPressureDataServiceImpl.java# 血压服务实现
│   │   │       │       ├── HeartRateDataServiceImpl.java    # 心率服务实现
│   │   │       │       └── PhysicalDataServiceImpl.java     # 体征服务实现
│   │   │       └── util/         # 工具类
│   │   │           ├── TokenUtil.java           # 令牌工具类
│   │   │           └── SecurityUtils.java       # 安全相关辅助方法
│   │   └── resources/            # 资源文件
│   │       ├── application.yml   # 应用配置
│   │       ├── logback-spring.xml # 日志配置
│   │       └── cert/             # 证书
│   │           ├── fullchain.pem  # 证书链(仓库副本 — 生产请使用安全注入)
│   │           └── privkey.pem    # 私钥(不要在公共仓库中保存)
│   └── test/                     # 测试代码
│       └── java/                 # 测试Java代码(当前为空)
├── target/                        # 编译输出目录(忽略提交)
│   ├── classes/                   # 编译后的类文件
│   ├── generated-sources/         # 生成的源代码
│   ├── generated-test-sources/    # 生成的测试源代码
│   └── test-classes/              # 编译后的测试类文件
├── docs/                          # 文档目录
│   ├── ReadME.md                  # 项目说明文档
│   └── DevRule/                   # 开发规范目录
├── logs/                          # 运行时日志目录
└── cert/                          # 仓库证书副本(生产环境请使用密钥管理)

包结构说明

主包 (work.baiyun.chronicdiseaseapp)

  • SpringAPP.java: Spring Boot应用程序的主启动类,包含@EnableKnife4j注解启用Knife4j接口文档。

common包

存放通用工具类和基础类,如统一响应对象R、分页对象Page等。

config包

存放Spring配置类,包括拦截器、CORS、MyBatis-Plus、Web MVC等配置。

controller包

存放Spring MVC控制器类,处理HTTP请求和响应。

enums包

存放枚举类,如结果码枚举、性别枚举、权限组枚举等。

exception包

存放自定义异常类和全局异常处理器。

handler包

存放MyBatis处理器,如元对象处理器、类型处理器等。

mapper包

存放MyBatis Mapper接口,用于数据访问。

model包

  • bo: 业务对象包(目前为空)
  • po: 持久化对象包,存放数据库实体类
  • vo: 视图对象包,存放请求和响应对象

service包

  • service: 服务接口包
  • service.impl: 服务实现包

util包

存放工具类,如令牌生成工具等。

资源文件结构

src/main/resources

  • application.yml: Spring Boot应用配置文件,包含服务器、数据库、MyBatis-Plus等配置
  • logback-spring.xml: 日志配置文件
  • cert/: 证书文件目录,存放SSL证书相关文件

测试结构

src/test/java

存放单元测试和集成测试代码。目前项目中该目录为空。

编译输出结构

target

Maven编译后的输出目录,包含编译后的类文件、生成的源代码等。生产环境部署时通常不需要包含此目录。

文档结构

docs

  • ReadME.md: 项目说明文档
  • DevRule/: 开发规范目录,包含各项开发规范文档

日志和证书目录

  • logs/: 运行时日志文件存放目录
  • cert/: 证书文件存放目录(根目录副本,与resources下的cert目录内容相同)

关于 targetlogscert

  • target/:为 Maven 构建输出目录,应在 .gitignore 中忽略,不提交到版本控制。
  • logs/:运行时日志目录,通常为部署所在机器的本地目录;如需要在容器或云环境下运行,请将日志重定向到标准输出或使用集中化日志(例如 ELK、Azure Monitor 等)。
  • cert/:仓库中存在证书副本(resources 下有 cert/),生产密钥和证书应通过安全密钥管理器(例如 Vault、Azure KeyVault)或 CI/CD 的机密存储注入,避免在公共或共享仓库中保存私钥。

测试约定

  • src/test/java/:存放单元测试和集成测试代码。当前目录为空,建议引入基础单元测试(示例:服务层的 TokenService / UserService 单元测试)并在 CI 中运行。

版本控制建议

  • target/logs/、以及 IDE 特有的配置目录(例如 .idea/)加入 .gitignore
  • 对于敏感证书/私钥,使用外部机密管理或将其放在部署时注入的位置,不直接放在仓库中。