# 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》，学习如何在这个架构下高效开发。
