docs(DDD-CQRS): 简化目录结构并更新开发指南
重构文档中的目录结构描述,从多层嵌套改为单层子文件夹原则 新增架构原则与文件组织规范章节,明确目录职责和命名规范 更新核心组件详解中的文件路径说明以符合新规范
This commit is contained in:
parent
46b760cef6
commit
48cab32859
|
|
@ -20,16 +20,11 @@
|
||||||
│ ├── Delete{Module}Command.java
|
│ ├── Delete{Module}Command.java
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── db/ # 数据层
|
├── db/ # 数据层
|
||||||
│ ├── entity/ # 实体类
|
│ ├── {Module}Entity.java # 实体类
|
||||||
│ │ └── {Module}Entity.java
|
│ ├── {Module}Service.java # 服务接口
|
||||||
│ ├── service/ # 服务层
|
│ ├── {Module}ServiceImpl.java # 服务实现
|
||||||
│ │ ├── {Module}Service.java
|
│ ├── {Module}Mapper.java # 数据访问
|
||||||
│ │ └── impl/
|
│ └── Search{Module}DO.java # 数据对象(复杂查询)
|
||||||
│ │ └── {Module}ServiceImpl.java
|
|
||||||
│ ├── mapper/ # 数据访问
|
|
||||||
│ │ └── {Module}Mapper.java
|
|
||||||
│ └── do/ # 数据对象(复杂查询)
|
|
||||||
│ └── Search{Module}DO.java
|
|
||||||
├── dto/ # 数据传输对象
|
├── dto/ # 数据传输对象
|
||||||
│ ├── {Module}DTO.java
|
│ ├── {Module}DTO.java
|
||||||
│ ├── {Module}DetailDTO.java
|
│ ├── {Module}DetailDTO.java
|
||||||
|
|
@ -44,11 +39,58 @@
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## 🏛️ 架构原则与文件组织规范
|
||||||
|
|
||||||
|
### 目录层级规范
|
||||||
|
|
||||||
|
**严格遵守单层子文件夹原则**:
|
||||||
|
|
||||||
|
1. **每个模块下最多只能有一层子文件夹**,不允许出现多层嵌套的包结构
|
||||||
|
2. **例外情况**:
|
||||||
|
- command 包:可以直接包含多个 Command 类文件,无需再分层
|
||||||
|
- query 包:可以直接包含多个 Query 类文件,无需再分层
|
||||||
|
- dto 包:可以直接包含多个 DTO 类文件,无需再分层
|
||||||
|
- model 包:可以直接包含 Model 和 ModelFactory 类文件,无需再分层
|
||||||
|
|
||||||
|
3. **正确的组织方式**:
|
||||||
|
```
|
||||||
|
✓ db/{Module}Entity.java
|
||||||
|
✓ db/{Module}Service.java
|
||||||
|
✓ db/{Module}ServiceImpl.java
|
||||||
|
✓ db/{Module}Mapper.java
|
||||||
|
✓ db/Search{Module}DO.java
|
||||||
|
|
||||||
|
✗ 错误:db/entity/{Module}Entity.java
|
||||||
|
✗ 错误:db/service/{Module}Service.java
|
||||||
|
✗ 错误:db/service/impl/{Module}ServiceImpl.java
|
||||||
|
✗ 错误:db/mapper/{Module}Mapper.java
|
||||||
|
✗ 错误:db/do/Search{Module}DO.java
|
||||||
|
```
|
||||||
|
|
||||||
|
### 命名规范
|
||||||
|
|
||||||
|
- **包名**:全部使用小写字母,单词间用下划线分隔(如 `command`、`dto`、`model`)
|
||||||
|
- **文件命名**:采用 PascalCase 命名法,体现类的职责
|
||||||
|
- **目录名**:采用小写字母,与包名保持一致
|
||||||
|
|
||||||
|
### 目录职责划分
|
||||||
|
|
||||||
|
| 目录 | 职责 | 文件类型 |
|
||||||
|
|------|------|----------|
|
||||||
|
| `command/` | 封装写操作请求参数 | Add/Update/Delete 命令对象 |
|
||||||
|
| `query/` | 封装读操作查询条件 | Search 查询对象 |
|
||||||
|
| `dto/` | 向前端传输数据 | DTO、详情DTO、配置文件DTO |
|
||||||
|
| `model/` | 领域模型和业务逻辑 | Model、ModelFactory |
|
||||||
|
| `db/` | 数据访问层 | Entity、Service、Mapper、DO |
|
||||||
|
| ApplicationService | 应用服务层 | 事务脚本、流程编排 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## 📝 核心组件详解
|
## 📝 核心组件详解
|
||||||
|
|
||||||
### 1. Entity(实体类)
|
### 1. Entity(实体类)
|
||||||
|
|
||||||
**位置**: `db/entity/{Module}Entity.java`
|
**位置**: `db/{Module}Entity.java`
|
||||||
|
|
||||||
**职责**: 数据库表的 Java 映射,继承 `BaseEntity` 获得通用字段
|
**职责**: 数据库表的 Java 映射,继承 `BaseEntity` 获得通用字段
|
||||||
|
|
||||||
|
|
@ -138,7 +180,7 @@ public class ExampleUserEntity extends BaseEntity<ExampleUserEntity> {
|
||||||
|
|
||||||
### 2. Service(服务层)
|
### 2. Service(服务层)
|
||||||
|
|
||||||
**位置**: `db/service/{Module}Service.java` 和 `impl/{Module}ServiceImpl.java`
|
**位置**: `db/{Module}Service.java` 和 `db/{Module}ServiceImpl.java`
|
||||||
|
|
||||||
**职责**: 封装数据库操作和简单业务逻辑,继承 MyBatis-Plus 的 `IService`
|
**职责**: 封装数据库操作和简单业务逻辑,继承 MyBatis-Plus 的 `IService`
|
||||||
|
|
||||||
|
|
@ -291,7 +333,7 @@ public class ExampleUserServiceImpl extends ServiceImpl<ExampleUserMapper, Examp
|
||||||
|
|
||||||
### 3. Mapper(数据访问层)
|
### 3. Mapper(数据访问层)
|
||||||
|
|
||||||
**位置**: `db/mapper/{Module}Mapper.java`
|
**位置**: `db/{Module}Mapper.java`
|
||||||
|
|
||||||
**职责**: MyBatis 数据访问接口,通常使用 MyBatis-Plus 的 `BaseMapper`
|
**职责**: MyBatis 数据访问接口,通常使用 MyBatis-Plus 的 `BaseMapper`
|
||||||
|
|
||||||
|
|
@ -356,7 +398,7 @@ public interface ExampleUserMapper extends BaseMapper<ExampleUserEntity> {
|
||||||
|
|
||||||
### 4. DO(数据对象)
|
### 4. DO(数据对象)
|
||||||
|
|
||||||
**位置**: `db/do/Search{Module}DO.java`
|
**位置**: `db/Search{Module}DO.java`
|
||||||
|
|
||||||
**职责**: 复杂查询返回的数据对象,包含关联表字段
|
**职责**: 复杂查询返回的数据对象,包含关联表字段
|
||||||
|
|
||||||
|
|
@ -1234,50 +1276,50 @@ public UserDTO(ExampleUserEntity entity) {
|
||||||
- [ ] 创建必要的索引
|
- [ ] 创建必要的索引
|
||||||
|
|
||||||
### 2. Entity 层
|
### 2. Entity 层
|
||||||
- [ ] 创建 `{Module}Entity.java`,继承 `BaseEntity`
|
- [ ] 在 `db/` 目录下创建 `{Module}Entity.java`,继承 `BaseEntity`
|
||||||
- [ ] 配置 `@TableName`、`@TableId`、`@TableField` 注解
|
- [ ] 配置 `@TableName`、`@TableId`、`@TableField` 注解
|
||||||
- [ ] 实现 `pkVal()` 方法
|
- [ ] 实现 `pkVal()` 方法
|
||||||
|
|
||||||
### 3. Mapper 层
|
### 3. Mapper 层
|
||||||
- [ ] 创建 `{Module}Mapper.java`,继承 `BaseMapper<Entity>`
|
- [ ] 在 `db/` 目录下创建 `{Module}Mapper.java`,继承 `BaseMapper<Entity>`
|
||||||
- [ ] 添加自定义查询方法(如需要)
|
- [ ] 添加自定义查询方法(如需要)
|
||||||
|
|
||||||
### 4. Service 层
|
### 4. Service 层
|
||||||
- [ ] 创建 `{Module}Service.java` 接口
|
- [ ] 在 `db/` 目录下创建 `{Module}Service.java` 接口
|
||||||
- [ ] 创建 `{Module}ServiceImpl.java` 实现类
|
- [ ] 在 `db/` 目录下创建 `{Module}ServiceImpl.java` 实现类
|
||||||
- [ ] 继承 `ServiceImpl<Mapper, Entity>`
|
- [ ] 继承 `ServiceImpl<Mapper, Entity>`
|
||||||
- [ ] 实现核心业务方法
|
- [ ] 实现核心业务方法
|
||||||
|
|
||||||
### 5. Command 层
|
### 5. Command 层
|
||||||
- [ ] 创建 `Add{Module}Command.java`
|
- [ ] 在 `command/` 目录下创建 `Add{Module}Command.java`
|
||||||
- [ ] 创建 `Update{Module}Command.java`(可选:继承基础 Command)
|
- [ ] 在 `command/` 目录下创建 `Update{Module}Command.java`(可选:继承基础 Command)
|
||||||
- [ ] 创建其他 Command(如 `Delete{Module}Command.java`)
|
- [ ] 在 `command/` 目录下创建其他 Command(如 `Delete{Module}Command.java`)
|
||||||
|
|
||||||
### 6. Query 层
|
### 6. Query 层
|
||||||
- [ ] 创建 `Search{Module}Query.java`
|
- [ ] 在 `query/` 目录下创建 `Search{Module}Query.java`
|
||||||
- [ ] 继承 `AbstractPageQuery<T>`
|
- [ ] 继承 `AbstractPageQuery<T>`
|
||||||
- [ ] 实现 `addQueryCondition()` 方法
|
- [ ] 实现 `addQueryCondition()` 方法
|
||||||
|
|
||||||
### 7. DTO 层
|
### 7. DTO 层
|
||||||
- [ ] 创建 `{Module}DTO.java`
|
- [ ] 在 `dto/` 目录下创建 `{Module}DTO.java`
|
||||||
- [ ] 添加构造函数(从 Entity/DO 转换)
|
- [ ] 添加构造函数(从 Entity/DO 转换)
|
||||||
- [ ] 添加 `@ExcelColumn` 注解(如果需要导出)
|
- [ ] 添加 `@ExcelColumn` 注解(如果需要导出)
|
||||||
- [ ] 集成缓存获取关联数据(如果需要)
|
- [ ] 集成缓存获取关联数据(如果需要)
|
||||||
|
|
||||||
### 8. Model 层
|
### 8. Model 层
|
||||||
- [ ] 创建 `{Module}Model.java`,继承 Entity
|
- [ ] 在 `model/` 目录下创建 `{Module}Model.java`,继承 Entity
|
||||||
- [ ] 添加 `load*Command()` 方法
|
- [ ] 添加 `load*Command()` 方法
|
||||||
- [ ] 添加 `check*()` 业务校验方法
|
- [ ] 添加 `check*()` 业务校验方法
|
||||||
- [ ] 添加业务逻辑处理方法
|
- [ ] 添加业务逻辑处理方法
|
||||||
|
|
||||||
### 9. ModelFactory 层
|
### 9. ModelFactory 层
|
||||||
- [ ] 创建 `{Module}ModelFactory.java`
|
- [ ] 在 `model/` 目录下创建 `{Module}ModelFactory.java`
|
||||||
- [ ] 使用 `@Component` 注解
|
- [ ] 使用 `@Component` 注解
|
||||||
- [ ] 添加 `loadById()` 方法
|
- [ ] 添加 `loadById()` 方法
|
||||||
- [ ] 添加 `create()` 方法
|
- [ ] 添加 `create()` 方法
|
||||||
|
|
||||||
### 10. ApplicationService 层
|
### 10. ApplicationService 层
|
||||||
- [ ] 创建 `{Module}ApplicationService.java`
|
- [ ] 创建 `{Module}ApplicationService.java`(位于模块根目录)
|
||||||
- [ ] 使用 `@Service` 注解
|
- [ ] 使用 `@Service` 注解
|
||||||
- [ ] 注入 Service 和 ModelFactory
|
- [ ] 注入 Service 和 ModelFactory
|
||||||
- [ ] 实现 CRUD 方法
|
- [ ] 实现 CRUD 方法
|
||||||
|
|
@ -1333,6 +1375,12 @@ AgileBoot 的 DDD/CQRS 架构通过清晰的分层和职责分离,为企业级
|
||||||
7. **ModelFactory**: 统一创建 Model
|
7. **ModelFactory**: 统一创建 Model
|
||||||
8. **ApplicationService**: 事务脚本层,协调各组件
|
8. **ApplicationService**: 事务脚本层,协调各组件
|
||||||
|
|
||||||
|
### 关键架构原则
|
||||||
|
|
||||||
|
- **单层子文件夹原则**:严格遵守每个模块下最多只能有一层子文件夹的规范,避免深层嵌套
|
||||||
|
- **职责分离**:每个目录和文件都有明确的职责边界
|
||||||
|
- **依赖倒置**:Domain 层不依赖 Infrastructure 层,通过 ApplicationService 协调
|
||||||
|
|
||||||
遵循本指南的规范,可以快速构建符合 DDD/CQRS 架构的高质量代码。
|
遵循本指南的规范,可以快速构建符合 DDD/CQRS 架构的高质量代码。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue