refactor(service): 统一Service缓存为VO对象并优化关联实体处理

重构Service类实现,将QueryService泛型参数调整为VO类型,确保缓存VO对象而非实体。优化关联实体处理逻辑,减少重复代码。修改findById方法返回VO对象,新增getById方法获取实体。更新相关调用点以适配新接口。

调整WebSocket处理、控制器及Service实现,确保数据类型一致性。完善文档记录重构过程及发现的问题。为后续优化提供基础架构支持。
This commit is contained in:
2025-09-29 19:31:51 +08:00
parent 64471b46f8
commit 49413ad473
167 changed files with 6840 additions and 1811 deletions

View File

@@ -0,0 +1,219 @@
# 实体-VO转换机制与缓存策略任务拆分
## 1. 任务概述
本任务旨在完善Contract-Manager项目中Server模块的实体-VO转换机制和缓存策略确保所有Service类遵循统一的接口实现规范正确使用泛型参数并优化缓存使用方式。
## 2. 子任务拆分
### 2.1 子任务1: 实体类实现Voable接口检查与修复
**输入契约**:
- 现有实体类代码
- Voable接口定义
- 现有VO类定义
**输出契约**:
- 所有实体类正确实现Voable接口
- 每个实体类实现toVo()方法,正确转换所有字段
- 关联实体处理符合设计规范
**实现约束**:
- 严格按照实体类与VO类的字段对应关系实现转换
- 关联实体只转换ID不加载完整对象
- 使用Lombok注解简化代码
**依赖关系**:
- 前置任务: 无
- 后置任务: 子任务2
### 2.2 子任务2: Service类实现QueryService接口检查与修复
**输入契约**:
- 现有Service类代码
- QueryService接口定义
- 实体类toVo()方法实现
**输出契约**:
- 所有Service类正确实现QueryService接口
- findById()方法正确返回VO对象并配置缓存
- findAll()方法正确返回Page<Vo>对象
- 分页查询参数处理正确
**实现约束**:
- 方法签名与接口保持一致
- 缓存键设计符合规范
- findAll方法不应使用缓存
**依赖关系**:
- 前置任务: 子任务1
- 后置任务: 子任务3
### 2.3 子任务3: Service类实现VoableService接口检查与修复
**输入契约**:
- 现有Service类代码
- VoableService接口定义
- 实体类和VO类定义
**输出契约**:
- 所有Service类正确实现VoableService接口
- updateByVo()方法正确更新实体属性
- 关联实体处理逻辑正确
**实现约束**:
- 只更新实际发生变化的关联实体
- 使用SpringApp.getBean获取关联Service
- 保持事务一致性
**依赖关系**:
- 前置任务: 子任务1
- 后置任务: 子任务4
### 2.4 子任务4: 缓存配置检查与优化
**输入契约**:
- 现有Service类的缓存注解配置
- Spring Cache配置
- Redis配置
**输出契约**:
- 所有Service类配置@CacheConfig注解
- 查询方法正确配置@Cacheable注解
- 保存/删除方法正确配置@CacheEvict/@Caching注解
- 缓存键命名规范统一
**实现约束**:
- 缓存名称与实体类型对应
- 缓存键具有唯一性
- 避免缓存过大的集合数据
**依赖关系**:
- 前置任务: 子任务2
- 后置任务: 子任务5
### 2.5 子任务5: 编写单元测试用例
**输入契约**:
- 修复后的实体类、VO类和Service类代码
- JUnit和Mockito框架
**输出契约**:
- 实体类toVo()方法的单元测试
- Service类查询和更新方法的单元测试
- 缓存功能的集成测试
- 测试覆盖率达到80%以上
**实现约束**:
- 测试用例覆盖正常流程、边界条件和异常情况
- 使用Mock对象模拟Repository层
- 缓存测试使用@SpringBootTest和@CacheEvict(allEntries = true)
**依赖关系**:
- 前置任务: 子任务1, 子任务2, 子任务3, 子任务4
- 后置任务: 子任务6
### 2.6 子任务6: 集成测试与验证
**输入契约**:
- 修复后的完整代码
- 测试环境配置
**输出契约**:
- 验证实体-VO转换机制正常工作
- 验证缓存策略正确应用
- 验证关联实体处理正确
- 验证系统整体功能不受影响
**实现约束**:
- 测试真实场景下的转换和缓存行为
- 模拟高并发场景验证缓存一致性
- 检查日志输出确认缓存命中情况
**依赖关系**:
- 前置任务: 子任务5
- 后置任务: 无
## 3. 任务依赖图
```mermaid
gantt
title 实体-VO转换机制与缓存策略任务依赖图
dateFormat YYYY-MM-DD
section 核心任务
实体类实现检查与修复 :a1, 2024-01-01, 3d
Service类实现QueryService接口 :a2, after a1, 3d
Service类实现VoableService接口 :a3, after a1, 3d
缓存配置检查与优化 :a4, after a2, 2d
编写单元测试用例 :a5, after a4, 2d
集成测试与验证 :a6, after a5, 2d
section 并行任务
文档更新与维护 :p1, 2024-01-01, 10d
```
## 4. 执行检查清单
### 4.1 实体类检查清单
- [ ] 所有实体类是否实现了Voable接口
- [ ] toVo()方法是否正确实现
- [ ] 所有字段是否正确映射到VO
- [ ] 关联实体是否只转换ID
- [ ] 是否避免了懒加载问题
### 4.2 Service类检查清单
- [ ] 是否实现了QueryService接口
- [ ] findById()方法是否返回VO对象
- [ ] findAll()方法是否返回Page<Vo>对象
- [ ] 是否实现了VoableService接口
- [ ] updateByVo()方法是否正确更新实体
- [ ] 关联实体处理逻辑是否正确
### 4.3 缓存配置检查清单
- [ ] 是否配置了@CacheConfig注解
- [ ] 查询方法是否配置了@Cacheable注解
- [ ] 保存/删除方法是否配置了缓存清理注解
- [ ] 缓存键设计是否合理
- [ ] findAll方法是否未使用缓存
### 4.4 测试检查清单
- [ ] 单元测试是否覆盖所有关键方法
- [ ] 测试用例是否覆盖正常、边界和异常情况
- [ ] 缓存功能是否经过测试验证
- [ ] 测试覆盖率是否达到要求
- [ ] 集成测试是否通过
### 4.5 文档检查清单
- [ ] 设计文档是否完整
- [ ] 任务拆分文档是否清晰
- [ ] 代码注释是否完善
- [ ] 更新日志是否记录
- [ ] 部署指南是否更新
## 5. 交付物
- 修复后的实体类、VO类和Service类代码
- 单元测试和集成测试代码
- 更新后的设计文档
- 更新后的任务文档
- 测试报告
- 实施总结报告
## 6. 风险与应对
1. **风险**: 代码修改影响现有功能
**应对**: 全面的单元测试和集成测试,确保修改不影响现有功能
2. **风险**: 缓存策略不正确导致数据不一致
**应对**: 仔细设计缓存键和清理策略,增加缓存一致性验证测试
3. **风险**: 关联实体处理不当导致性能问题
**应对**: 优化关联查询避免N+1问题使用懒加载和按需加载
4. **风险**: 任务范围扩大导致延期
**应对**: 严格按照任务边界执行,必要时调整任务优先级