DEVELOPMENT_GUIDELINES.md 3.8 KB

开发规范草案

本文件根据项目现有代码样本提取,目标是将隐含约定显式化,便于团队统一风格与快速上手。

  1. 项目结构与包命名
  2. 采用标准 Spring Boot 项目结构,顶级包为 work.baiyun.chronicdiseaseapp
  3. 分层清晰:config, controller, service, mapper, model (含 po, vo, bo), common, exception, handler, util 等。
  4. 包命名使用小写,按功能划分。

  5. 类与命名约定

  6. 类名采用 PascalCase(大驼峰)。

  7. 接口与实现类分别放在 serviceservice.impl 或使用明确后缀 *Service/*ServiceImpl

  8. Mapper 使用 *Mapper 命名,位于 mapper 包。

  9. POJO 与数据库字段映射

  10. 建议 POJO 字段使用驼峰命名(camelCase)。

  11. 通过 @TableField 等注解映射数据库 snake_case 列名(项目 README 中已有建议)。

  12. 控制器与返回结构

  13. 全局统一返回类型为 work.baiyun.chronicdiseaseapp.common.R<T>

  14. R 提供 success / fail 静态方法,包含 codemessagedata 字段。

  15. Controller 层尽量返回 R<T>,业务异常与验证异常由全局异常处理器处理。

  16. 分页

  17. 分页封装使用 work.baiyun.chronicdiseaseapp.common.Page<T>,构造器接受 pageNum, pageSize, list,并使用 PageInfo 获取 total。

  18. 异常处理

  19. 使用自定义 CustomException 抛出业务异常。

  20. 全局异常处理器 CustomExceptionHandler(使用 @RestControllerAdvice)统一处理:

    • 参数校验异常:BindExceptionConstraintViolationException → 返回验证失败信息(合并消息)
    • 自定义异常:CustomException → 返回自定义消息
    • 其他异常:打印堆栈并返回通用错误码/信息(参考 ExceptionResultCode
  21. 依赖与自动配置

  22. 项目使用 Spring Boot,并排除了 Thymeleaf 的自动配置(见 SpringAPP)。

  23. 使用 Knife4j(API 文档)注解 @EnableKnife4j

  24. 注解与校验

  25. 参数校验使用 Jakarta Validation(见 ConstraintViolationException 的处理),并在 Controller/DTO 上使用注解进行字段校验。

  26. 日志与调试

  27. 在全局未捕获异常时使用日志记录(已将 printStackTrace() 替换为 SLF4J 的 log.error(...))。

  28. 推荐使用 SLF4J + Logback(项目中添加了 logback-spring.xml),控制台+文件滚动保存日志。示例:

    private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(YourClass.class);
    try {
    // ...
    } catch (Exception e) {
    log.error("处理异常", e);
    }
    
  • 约定:不要在代码中使用 e.printStackTrace();优先使用 log.debug/info/warn/error 并在生产环境避免过多的 DEBUG/TRACE 输出。
  1. Lombok 使用
  2. 项目使用 Lombok(见 @Data, @Getter, @Setter),请在 IDE 中启用 Lombok 插件并配置编译器注解处理。

  3. 风格建议(可选增强)

  4. 引入 Checkstyle / SpotBugs / PMD 做静态检查,统一代码风格。

  5. 使用 Git 钩子(pre-commit)自动格式化(例如使用 google-java-format 或者 Eclipse formatter)。

  6. R 的 code/message 常量化到枚举(项目已有 ExceptionResultCodeSuccessResultCodeFailResultCode)。

  7. 用统一 Logger 替换 printStackTrace(),并在生产环境禁用 DEBUG/TRACE 日志。

附录:样本来源文件

  • src/main/java/work/baiyun/chronicdiseaseapp/SpringAPP.java
  • src/main/java/work/baiyun/chronicdiseaseapp/common/Page.java
  • src/main/java/work/baiyun/chronicdiseaseapp/common/R.java
  • src/main/java/work/baiyun/chronicdiseaseapp/exception/CustomException.java
  • src/main/java/work/baiyun/chronicdiseaseapp/exception/CustomExceptionHandler.java

说明:这是初稿,可依据团队反馈补充 Controller 注解约定、事务管理、Service 层返回类型、单元测试约定(JUnit 版本、Mock 框架)等内容。