14 KiB
CLAUDE.md
本文件用于指导 Claude Code (claude.ai/code) 在此代码仓库中工作时的行为规范。
本规范适用于 BladeX 微服务平台的所有开发任务,为强制性条款。除非用户显式豁免,任何条目都不得忽视或删减。
作为 AI 助手参与本项目开发时,你必须:
- 每次输出前深度理解 BladeX 微服务架构、Spring Cloud 全栈技术特征和多租户业务模型
- 当回答依赖外部知识时,先查询 Spring Boot 3.x、Spring Cloud 2025、MyBatis-Plus 等官方文档
- 若需求含糊,先复述已知信息并列出关键澄清问题
- 面对复杂需求,先拆分为可管理的子任务
所有开发内容必须建立在深度思考过的基础之上,禁止机械生成与错误填充。 如果你已了解所有规范,请在用户第一次对话时说明:"我已充分了解 BladeX 微服务平台开发规范。"
1. 项目概述
BladeX 是基于 Spring Cloud 2025 + Spring Boot 3.x 构建的企业级微服务开发平台,提供 SaaS 多租户、OAuth2 认证、数据/接口权限、工作流、分布式事务等核心能力。
2. 项目架构
BladeX/
├── blade-auth/ # OAuth2 认证授权服务
├── blade-common/ # 公共模块(常量、工具类、启动配置)
├── blade-gateway/ # Spring Cloud Gateway 网关服务
├── blade-ops/ # 运维服务模块
│ ├── blade-admin/ # Spring Boot Admin 监控
│ ├── blade-develop/ # 代码生成服务
│ ├── blade-flow/ # Flowable 工作流服务
│ ├── blade-job/ # 分布式任务调度
│ ├── blade-log/ # 日志服务
│ ├── blade-report/ # 报表服务
│ └── blade-resource/ # 资源管理服务(OSS、SMS)
├── blade-ops-api/ # 运维服务 API 契约
├── blade-plugin/ / blade-plugin-api/ # 插件扩展模块(预留)
├── blade-service/ # 业务服务模块
│ ├── blade-desk/ # 工作台服务(通知、流程)
│ └── blade-system/ # 系统管理服务(用户、角色、菜单、租户等)
├── blade-service-api/ # 业务服务 API 契约
├── doc/ # Nacos 配置 & 多数据库建表脚本
├── script/ # Docker / FatJar 部署脚本
└── pom.xml # Maven 父工程配置
2.1 分层架构
每个业务模块遵循标准分层,API 与 Service 分离:
| 层次 | 包路径 | 所在模块 |
|---|---|---|
| Controller | controller/ |
Service 模块 |
| Service / ServiceImpl | service/ + service/impl/ |
Service 模块 |
| Mapper(接口 + XML 同包) | mapper/ |
Service 模块 |
| Wrapper | wrapper/ |
Service 模块(Entity → VO 转换) |
| Entity / VO / DTO | pojo/entity/ pojo/vo/ pojo/dto/ |
API 模块 |
| Feign Client | feign/ |
API 模块(含 Fallback 降级) |
| Cache | cache/ |
API 模块 |
2.2 API 与 Service 分离原则
- API 模块(
blade-*-api):定义 Entity、VO、DTO、Feign 接口、Cache 工具,供其他服务依赖 - Service 模块(
blade-service/*、blade-ops/*):实现 Controller、ServiceImpl、Mapper、Wrapper - 跨服务调用通过 Feign Client 完成,禁止直接依赖其他 Service 模块
与 Boot 版的关键区别:Cloud 采用 API/Service 模块分离,跨服务通过 Feign 调用;Controller 路由无需
AppConstant前缀(网关按服务名路由)。
3. 技术栈
| 类别 | 技术 |
|---|---|
| 基础框架 | Spring Boot 3.2.x / Spring Cloud 2025 / Maven |
| ORM | MyBatis-Plus(禁止 JDBC 直连) |
| 微服务 | Nacos(注册/配置)、Sentinel(熔断)、Seata(分布式事务)、OpenFeign |
| 网关 | Spring Cloud Gateway(WebFlux) |
| 安全 | OAuth2 / JWT(自研 Secure 框架)、数据权限、接口权限 |
| 缓存 | Redis(Protostuff 序列化) |
| 工作流 / 任务调度 | Flowable / PowerJob |
| 数据库连接池 | Druid |
| 文档 | Knife4j(OpenAPI 3.0) |
| 监控 | Spring Boot Admin / Prometheus / ELK / Zipkin |
| 数据库 | MySQL / PostgreSQL / Oracle / SQL Server / 达梦 / 人大金仓 / 崖山 |
4. 开发规范
4.1 编写新功能前
- 先阅读目标模块中已有的类,理解其结构、命名和风格
- 标准参考模块:
blade-service/blade-system(Service)、blade-service-api/blade-system-api(API) - 主动模仿现有代码风格,包括缩进(Java 用 Tab,YAML/JSON 用 2 空格)、注解顺序、Javadoc 格式
- 新建类必须包含 BladeX 商业许可证头部和 Javadoc 类注释(
@author Chill)
4.2 编写完成后
- 使用
mvn clean compile -DskipTests编译验证,编译不通过必须修复 - 引入模块依赖前先检查循环依赖,若存在则采用更优方案
- 编译通过后将测试交由用户执行,不得自行执行任何测试
- 除非用户明确要求,不应撰写示例或额外文档
4.3 代码生成
当需要生成 CRUD 全套代码(Entity、VO、Service、Controller、Wrapper、Mapper、建表语句等)时,优先使用 /blade-design skill。该 skill 可根据模块名、实体名和字段列表,自动生成符合 BladeX 框架规范的后端代码和多数据库建表语句,确保生成结果与项目风格完全一致。
5. 命名规范
5.1 包名
统一前缀 org.springblade,按模块划分:system、desk、auth、gateway、develop、flow、common 等
5.2 类名
| 类型 | 规则 | 示例 |
|---|---|---|
| Entity | 直接类名 | Notice、Tenant |
| VO / DTO | XxxVO / XxxDTO |
NoticeVO、DeptDTO |
| Service 接口 | IXxxService |
INoticeService |
| Service 实现 | XxxServiceImpl |
NoticeServiceImpl |
| Controller | XxxController |
NoticeController |
| Mapper | XxxMapper |
NoticeMapper |
| Wrapper | XxxWrapper |
NoticeWrapper |
| Feign 接口 / 降级 | IXxxClient / IXxxClientFallback |
INoticeClient |
| 表名 | blade_ + 下划线 |
blade_notice |
5.3 变量命名
- 必须具有明确语义:
Exception exception(✅)Exception e(❌);List<Notice> noticeList(✅)List<Notice> list(❌) - 冲突时提升语义:
Cache cache; Cache noticeCache(✅)Cache cache1; Cache cache2(❌)
6. 编码规范
6.1 注解顺序
- Controller 类:租户注解(
@TenantDS/@NonDS) →@RestController→ Lombok(@AllArgsConstructor) → 安全注解(@PreAuth) →@RequestMapping→@Tag - Controller 方法:HTTP 方法注解 →
@ApiOperationSupport(order=N)→@Operation - Entity 类:
@Data→@EqualsAndHashCode→@TableName→@Schema - VO 类:
@Data→@EqualsAndHashCode(callSuper = true)→@Schema
6.2 Entity-Service 继承体系(核心)
Entity 基类的选择直接决定 Service 和 ServiceImpl 的继承方式,三者必须配套:
| 场景 | Entity | Service 接口 | ServiceImpl | 示例 |
|---|---|---|---|---|
| 多租户业务表 | extends TenantEntity |
extends BaseService<T> |
extends BaseServiceImpl<M, T> |
Notice, Post, Dept |
| 非租户业务表 | extends BaseEntity |
extends BaseService<T> |
extends BaseServiceImpl<M, T> |
Tenant |
| 轻量级/关系表 | implements Serializable |
extends IService<T> |
extends ServiceImpl<M, T> |
RoleMenu, Dict, Role |
TenantEntity继承自BaseEntity并额外包含tenantIdBaseEntity包含:id, createUser, createDept, createTime, updateUser, updateTime, status, isDeletedBaseService/BaseServiceImpl是 BladeX 增强版,提供deleteLogic()等方法,要求 Entity 继承 BaseEntity 或 TenantEntityIService/ServiceImpl是 MyBatis-Plus 原生版,用于implements Serializable的轻量实体,删除用removeByIds()
6.3 Controller 约定
- 继承
BladeController,使用@AllArgsConstructor注入 - 路由直接使用资源路径(如
@RequestMapping("notice")),网关按服务名路由,无需AppConstant前缀(Boot 版需要前缀) - 统一返回
R<T>响应体 - Entity → VO 转换通过
XxxWrapper.build().entityVO()/.pageVO()
6.4 Feign Client(Cloud 特有)
- 定义在 API 模块的
feign/包中 @FeignClient(value = AppConstant.APPLICATION_XXX_NAME)- 路径常量定义在接口内:
String API_PREFIX = "/feign/client/xxx" - 降级类命名:
IXxxClientFallback
6.5 依赖注入
- Controller 使用
@AllArgsConstructor+private final字段 - Service 需要额外依赖时使用
@RequiredArgsConstructor+private final字段
6.6 Lombok
禁止手写 getter/setter,统一使用 @Data、@EqualsAndHashCode(callSuper = true)、@AllArgsConstructor、@RequiredArgsConstructor、@Slf4j 等
6.7 Java 17 特性
- 可使用增强 switch、Text Blocks、Pattern Matching for instanceof、
@Serial - 禁止
var/val类型推断,所有变量显式声明类型 - 优先使用 Stream API,Lambda 保持简洁
6.8 MyBatis-Plus
- 简单查询使用
LambdaQueryWrapper,复杂查询写在 Mapper XML 中 - Mapper XML 与接口同包放置(
src/main/java下) - 分页统一使用
Condition.getPage(query)+Condition.getQueryWrapper() - 禁止 JDBC 直连查询
6.9 日志
- 使用
@Slf4j,占位符传参(禁止字符串拼接) - 包含关键业务标识,异常必须携带堆栈,禁止打印敏感信息
7. 数据库规范
- 表名前缀:
blade_(如blade_notice、blade_user) - 业务表必含字段:
id(BIGINT)、tenant_id(VARCHAR)、create_user、create_dept、create_time、update_user、update_time、status、is_deleted - 主键策略:雪花算法(
IdType.ASSIGN_ID),Long 字段用@JsonSerialize(using = ToStringSerializer.class)防精度丢失 - 逻辑删除:
is_deleted(INT),0 = 未删除,1 = 已删除 - 索引命名:唯一索引
uk_前缀,普通索引idx_前缀 - 多数据库:支持 7 种数据库,建表脚本位于
doc/sql/,修改表结构时需同步所有脚本
8. 多租户与安全
- 多租户:默认字段隔离模式(
tenant_id),MP 内置方法自动注入;自定义 SQL 需手动AuthUtil.getTenantId() - 租户注解:
@TenantDS(启用数据源切换)/@NonDS(禁用切换) - 权限注解:
@PreAuth(menu = "xxx")(菜单权限)、@PreAuth(AuthConstant.PERMIT_ALL)(公开) - 数据权限:DataScopeHandler 行级过滤
- 接口权限:ApiScopeHandler 端点级控制
9. 缓存规范
CacheUtil统一操作,常量在CacheConstant- 数据变更后清除缓存:
CacheUtil.clear(CACHE_NAME, Boolean.FALSE) - 字典翻译:
DictCache.getValue(DictEnum.XXX, value)
10. 商业许可头部
所有新建的 Java 源文件必须在文件顶部包含以下许可头部:
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
* <p>
* Use of this software is governed by the Commercial License Agreement
* obtained after purchasing a license from BladeX.
* <p>
* 1. This software is for development use only under a valid license
* from BladeX.
* <p>
* 2. Redistribution of this software's source code to any third party
* without a commercial license is strictly prohibited.
* <p>
* 3. Licensees may copyright their own code but cannot use segments
* from this software for such purposes. Copyright of this software
* remains with BladeX.
* <p>
* Using this software signifies agreement to this License, and the software
* must not be used for illegal purposes.
* <p>
* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
* not liable for any claims arising from secondary or illegal development.
* <p>
* Author: Chill Zhuang (bladejava@qq.com)
*/
11. 构建与部署
mvn clean compile -DskipTests # 编译验证
mvn clean package -DskipTests # 打包
mvn clean package docker:build -DskipTests # Docker 镜像
- Nacos 配置:
doc/nacos/blade-{dev|test|prod}.yaml - Docker 部署:
script/docker/app/docker-compose.yml - 开发环境默认:Nacos
localhost:8848、Sentinellocalhost:8858、Redis127.0.0.1:6379、MySQLlocalhost:3306/bladex
12. Git 提交规范
当需要提交代码时,优先使用 /blade-commit skill,它会自动分析变更内容并生成符合项目规范的 Gitmoji 提交信息。
采用 Gitmoji 风格,中文描述。格式::<gitmoji>: 简要描述
| Gitmoji | 场景 | 示例 |
|---|---|---|
:sparkles: |
新增功能 | :sparkles: 新增角色授权功能 |
:zap: |
优化重构 | :zap: 优化字典查询排序逻辑 |
:bug: |
修复缺陷 | :bug: 修复用户查询未过滤已删除数据 |
:tada: |
版本发布 | :tada: x.x.x.RELEASE |
:recycle: |
代码重构 | :recycle: 重构租户删除逻辑 |
13. 框架组件速查
| 组件 | 用途 |
|---|---|
R<T> |
统一 API 响应 |
BladeController |
Controller 基类 |
TenantEntity / BaseEntity |
实体基类(多租户/非租户) |
BaseService / BaseServiceImpl |
BladeX 增强 Service(含 deleteLogic) |
BaseEntityWrapper |
Entity→VO 转换基类 |
BladeUser |
当前登录用户(含租户信息) |
Condition / Query |
查询条件构建 / 分页参数 |
CacheUtil / DictCache |
缓存工具 / 字典缓存 |
AuthUtil |
获取当前用户/租户信息 |
Func / BeanUtil / StringUtil |
通用工具类 |
ServiceException |
业务异常 |
@PreAuth / @TenantDS / @NonDS |
权限 / 租户数据源切换 |
@BladeView / @DataRecord / @XssIgnore |
视图控制 / 数据审计 / XSS 跳过 |
14. 风格一致性
- 风格不确定时,优先查阅现有代码并模仿当前模块的实现方式
- 新模块参考
blade-service/blade-system作为标准模板 - 现有模块已满足需求时,禁止自写替代实现
- 与用户交互全程使用中文,代码注释和 Javadoc 亦使用中文