优化后端配置和数据库结构

1. 修复Swagger配置,添加武术模块API分组
   - 在SwaggerConfiguration中新增martialApi()方法
   - 使武术模块的66个接口能在Knife4j界面正常显示

2. 优化项目依赖配置
   - 添加spring-boot-starter-actuator用于健康检查
   - 暂时注释flowable工作流依赖以简化项目

3. 更新数据库结构
   - 优化martial_db.sql,精简表结构从123张减少到53张
   - 保留核心BladeX系统表和15张武术业务表
   - 更新测试数据:2场比赛、10名运动员、9个项目

4. 补充项目文档
   - 添加架构说明、开发指南等中文文档

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
n72595987@gmail.com
2025-11-29 16:30:20 +08:00
parent 9c77fcb4ac
commit 38472ee832
7 changed files with 7502 additions and 7331 deletions

410
doc/架构说明.md Normal file
View File

@@ -0,0 +1,410 @@
# BladeX 框架架构说明
## 一、架构概览
本项目基于 **BladeX 4.0.1 企业级框架**,采用混合式架构设计,包含:
- 分层架构common 通用层)
- 模块化架构modules 业务模块)
- DDD 思想pojo/entity/dto/vo 分离)
## 二、目录结构对比
### 传统 Spring Boot 项目(清晰简单)
```
src/main/java/com/company/project/
├── controller/ # 所有控制器
├── service/ # 所有服务
│ └── impl/
├── mapper/dao/ # 所有数据访问
├── entity/model/ # 所有实体
├── dto/ # 所有DTO
├── vo/ # 所有VO
├── config/ # 配置类
├── util/ # 工具类
└── constant/ # 常量
```
**特点**:按技术层级分包,结构扁平,一目了然
---
### BladeX 项目(复杂混合)
```
src/main/java/org/springblade/
├── Application.java # 主启动类
├── common/ # 通用层(横向关注点)
│ ├── cache/ # 缓存工具UserCache、DictCache等
│ ├── config/ # 全局配置Swagger、Blade核心配置等
│ ├── constant/ # 全局常量CommonConstant、DictConstant等
│ ├── enums/ # 通用枚举
│ ├── event/ # 事件监听器(日志监听等)
│ ├── filter/ # 全局过滤器
│ ├── handler/ # 全局处理器
│ ├── launch/ # 启动相关
│ └── utils/ # 通用工具类
├── job/ # 定时任务模块(独立)
│ ├── controller/ # 任务管理API
│ ├── mapper/ # 任务数据访问
│ ├── pojo/ # 任务数据对象
│ │ ├── entity/ # JobInfo, JobServer
│ │ ├── dto/
│ │ └── vo/
│ ├── processor/ # 任务处理器(实际执行逻辑)
│ └── service/ # 任务业务逻辑
└── modules/ # 业务模块(核心业务)
├── auth/ # 认证授权模块
│ ├── config/ # 认证配置
│ ├── constant/ # 认证常量
│ ├── granter/ # Token授权器多种登录方式
│ ├── handler/ # 认证处理器
│ ├── provider/ # 认证提供者
│ ├── service/ # 认证服务
│ └── utils/ # 认证工具
├── system/ # 系统管理模块
│ ├── controller/ # 用户、角色、菜单、部门等API
│ ├── mapper/ # 数据访问层
│ ├── pojo/
│ │ ├── entity/ # 系统实体User、Role、Menu等
│ │ ├── dto/ # 数据传输对象
│ │ └── vo/ # 视图对象
│ ├── service/ # 系统业务逻辑
│ ├── excel/ # Excel导入导出
│ ├── rule/ # 业务规则
│ └── wrapper/ # 数据包装器
├── resource/ # 资源管理模块
│ ├── controller/ # 附件、OSS、SMS API
│ ├── mapper/
│ ├── pojo/
│ ├── service/
│ ├── builder/ # OSS构建器支持多云存储
│ ├── config/ # 资源配置
│ ├── endpoint/ # 端点
│ ├── rule/ # 规则
│ └── utils/ # 资源工具
├── desk/ # 工作台模块
│ ├── controller/ # 仪表盘、通知API
│ ├── mapper/
│ ├── pojo/
│ ├── service/
│ └── wrapper/
├── develop/ # 开发工具模块
│ ├── controller/ # 代码生成、数据源管理API
│ ├── mapper/
│ ├── pojo/
│ └── service/
└── martial/ # 武术比赛模块(主业务)⭐
├── controller/ # 比赛业务API
├── mapper/ # 数据访问层
├── pojo/
│ ├── entity/ # 9个核心实体
│ │ ├── Competition.java # 赛事
│ │ ├── Athlete.java # 运动员
│ │ ├── Judge.java # 裁判
│ │ ├── Project.java # 项目
│ │ ├── Schedule.java # 赛程
│ │ ├── Venue.java # 场馆
│ │ ├── Score.java # 评分
│ │ ├── Result.java # 成绩
│ │ └── RegistrationOrder.java # 报名订单
│ ├── dto/
│ └── vo/
└── service/
```
## 三、架构特点分析
### ✅ 优点
1. **功能全面**
- 内置认证授权、权限管理、多租户、OSS、SMS等
- 开箱即用,快速开发
2. **模块独立**
- 每个 module 相对独立,可单独开发
- 便于团队分工协作
3. **高度封装**
- 框架提供大量基础功能
- 减少重复代码
### ⚠️ 缺点(为什么感觉"乱"
#### 1. **职责边界模糊**
```
❓ common 和 modules 的边界不清
- common/config vs modules/auth/config
- common/utils vs modules/resource/utils
什么应该放 common
✅ 真正通用的、跨模块的DateUtil、StringUtil
❌ 某个模块专用的(应该放模块内部)
```
#### 2. **结构不统一**
```
❓ modules 下各模块结构不一致
auth 模块: system 模块:
├── config/ ├── controller/
├── granter/ ├── mapper/
├── service/ ├── pojo/
└── utils/ │ ├── entity/
│ ├── dto/
martial 模块: │ └── vo/
├── controller/ ├── service/
├── mapper/ ├── excel/
├── pojo/ └── wrapper/
│ ├── entity/
│ ├── dto/
│ └── vo/
└── service/
为什么不统一?
- auth 没有 pojo 目录(因为它不直接操作数据库表)
- system 有 excel/wrapper因为需要导入导出
- martial 结构最标准因为是典型CRUD业务
```
#### 3. **多余层级**
```
❓ 为什么要多一层 pojo
传统做法:
modules/martial/entity/Competition.java
modules/martial/dto/CompetitionDTO.java
BladeX 做法:
modules/martial/pojo/entity/Competition.java
modules/martial/pojo/dto/CompetitionDTO.java
原因DDD 思想中pojo 代表"领域对象"的总称
但实际上增加了复杂度,没有明显好处
```
#### 4. **job 模块孤立**
```
❓ 为什么 job 不在 modules 里?
既然有 modulesjob 应该是:
modules/job/
├── controller/
└── ...
而不是单独拿出来,破坏了统一性
```
## 四、架构设计理念分析
BladeX 混合了多种架构理念:
### 1. 分层架构Layered Architecture
```
common 层 → 为所有模块提供通用功能
```
**目的**:代码复用
**问题**:边界不清,什么都往 common 塞
### 2. 模块化架构Modular Architecture
```
modules/ → 按业务领域划分模块
```
**目的**:业务隔离,独立演进
**问题**:模块结构不统一
### 3. DDD 思想Domain-Driven Design
```
pojo/entity/ → 实体
pojo/dto/ → 数据传输对象
pojo/vo/ → 视图对象
```
**目的**:分离关注点,清晰职责
**问题**:层级过多,不够彻底(缺少聚合根、值对象等核心概念)
### 4. 微服务思想(部分)
```
每个 module 独立controller + service + mapper + pojo
```
**目的**:为将来拆分成微服务做准备
**问题**:单体架构下过度设计
## 五、为什么会这样设计?
### 商业框架的通病
BladeX 是一个**商业企业级框架**,它的设计目标是:
1. **功能全面** → 覆盖各种场景
2. **快速开发** → 内置大量模板代码
3. **灵活扩展** → 支持多种架构演进
但这导致:
- ✅ 功能多 → ❌ 结构复杂
- ✅ 封装好 → ❌ 理解成本高
- ✅ 可扩展 → ❌ 过度设计
### 类比:豪华汽车 vs 普通汽车
```
传统 Spring Boot 项目 = 普通家用车
- 结构简单,容易理解
- 功能够用,性价比高
- 维护方便
BladeX 框架 = 豪华商务车
- 功能丰富,配置复杂
- 适合企业场景
- 需要专业维护
```
## 六、如何理解这个架构?
### 思维模型:三层金字塔
```
┌──────────────┐
│ modules │ 业务层(核心)
│ 业务模块 │ - 专注业务逻辑
└──────────────┘ - 模块独立
┌──────────────┐
│ job │ 功能层(辅助)
│ 定时任务 │ - 定时调度
└──────────────┘ - 后台任务
┌──────────────┐
│ common │ 基础层(通用)
│ 通用工具 │ - 工具类
└──────────────┘ - 配置
- 常量
```
### 核心原则
1. **common** = 真正通用的、跨模块的
2. **modules** = 业务核心,模块独立
3. **job** = 定时任务的特殊模块
## 七、与标准架构的映射
如果你熟悉传统架构,可以这样理解:
| BladeX 架构 | 传统架构 | 说明 |
|------------|---------|------|
| `common/utils/` | `util/` | 工具类 |
| `common/constant/` | `constant/` | 常量 |
| `common/config/` | `config/` | 配置 |
| `modules/martial/controller/` | `controller/` | 控制器 |
| `modules/martial/service/` | `service/` | 服务 |
| `modules/martial/mapper/` | `mapper/` | 数据访问 |
| `modules/martial/pojo/entity/` | `entity/` | 实体多了pojo层 |
| `modules/martial/pojo/dto/` | `dto/` | DTO多了pojo层 |
| `modules/martial/pojo/vo/` | `vo/` | VO多了pojo层 |
**关键差异**
- ✅ 传统:一个 `entity/` 目录
- ❌ BladeX`modules/martial/pojo/entity/`(多两层)
## 八、实际开发时如何思考?
### 场景1我要加个工具类
```java
放哪里
这个工具类是给多个模块用的吗
common/utils/XxxUtil.java
modules/martial/utils/XxxUtil.java在模块内部创建utils目录
```
### 场景2我要加个实体类
```java
放哪里
固定位置
modules/martial/pojo/entity/Xxx.java
虽然多了pojo层但保持一致
```
### 场景3我要加个配置类
```java
放哪里
这个配置是全局的吗
Redis配置 common/config/RedisConfig.java
武术评分规则 modules/martial/config/ScoringConfig.java
```
### 场景4我要加个Controller
```java
放哪里
固定位置
modules/martial/controller/XxxController.java
不需要思考统一放这里
```
## 九、总结
### 现状
这是一个**混合式架构**的商业框架项目:
- ✅ 功能全面,开箱即用
- ⚠️ 结构复杂,理解成本高
- ❌ 设计不够统一,有些"乱"
### 建议
1. **不要试图改造整体架构**
- 成本太高
- 可能破坏框架功能
2. **理解规则,遵循规则**
- 虽然不完美,但有规律可循
- 保持代码风格一致
3. **专注业务**
- 核心工作在 `modules/martial/`
- 不需要关心其他模块细节
4. **参考现有代码**
-`modules/system/` 的实现
- 模仿其结构和写法
### 核心理念
**把它当作"带框架的项目"而不是"纯净的项目"**
- 框架部分auth, system, resource, desk, develop, common, job
- 业务部分modules/martial/ (这是你要关注的)
---
**下一步**:查看《开发指南.md》学习如何在这个架构下高效开发。