优化后端配置和数据库结构
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:
410
doc/架构说明.md
Normal file
410
doc/架构说明.md
Normal 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 里?
|
||||
|
||||
既然有 modules,job 应该是:
|
||||
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》,学习如何在这个架构下高效开发。
|
||||
Reference in New Issue
Block a user