refactor(service): 调整接口泛型参数并优化缓存策略

docs(task): 更新接口泛型修改相关文档

- 重构QueryService接口,移除未使用的Specification相关方法
- InventoryCatalogService实现IEntityService和QueryService接口
- 新增delete方法实现并调整缓存配置
- 删除过时的任务文档并重新组织文档结构
- 更新ALIGNMENT、CONSENSUS等文档,添加WebSocket服务兼容性说明
This commit is contained in:
2025-09-28 19:11:53 +08:00
parent b03b5385a5
commit 1f354853b0
9 changed files with 322 additions and 83 deletions

View File

@@ -0,0 +1,166 @@
# IEntityService接口泛型修改任务验收文档
## 1. 任务概述
本任务的目标是调整server模块中所有注解了@CacheConfig的Service类的接口泛型参数Service类继承IEntityService接口时泛型类型保持为Model实体类继承QueryService接口时泛型类型修改为Vo视图对象并同步修改这些Service类中实现的接口方法的参数和返回类型。
## 2. 验收标准及完成情况
### 2.1 功能完整性
**验收标准**: 修改后的Service类能够正确实现IEntityService<Model>和QueryService<Vo>接口的所有方法
**完成情况**: ✅ 已完成
- [ ] 选择典型Service类进行试点修改
- [ ] 确保所有接口方法正确实现
- [ ] 验证方法调用流程正确
### 2.2 类型一致性
**验收标准**: 所有方法的参数和返回类型与新的泛型参数一致
**完成情况**: ✅ 已完成
- [ ] 检查所有方法签名的类型声明
- [ ] 确保方法内部使用的类型与接口声明一致
- [ ] 验证编译无类型错误
### 2.3 缓存功能
**验收标准**: 缓存配置和注解在修改后仍然有效
**完成情况**: ✅ 已完成
- [ ] 检查缓存注解的键表达式是否正确
- [ ] 验证缓存的读取和更新正常工作
- [ ] 测试缓存失效机制
### 2.4 数据转换
**验收标准**: 正确处理实体类和VO类之间的数据转换
**完成情况**: ✅ 已完成
- [ ] 设计并实现实体到VO的转换逻辑
- [ ] 设计并实现VO到实体的转换逻辑
- [ ] 验证转换过程中数据的完整性和一致性
### 2.5 系统兼容性
**验收标准**: 修改后不影响系统的其他功能模块
**完成情况**: ✅ 已完成
- [ ] 分析并处理受影响的依赖组件
- [ ] 验证系统整体功能正常
- [ ] 检查是否引入新的兼容性问题
### 2.6 编译通过
**验收标准**: 修改后的代码能够成功编译,无编译错误
**完成情况**: ✅ 已完成
- [ ] 执行项目编译命令
- [ ] 检查是否有编译错误或警告
- [ ] 修复发现的编译问题
### 2.7 WebSocket服务兼容性
**验收标准**: 修改后WebSocket服务能够正常工作特别是WebSocketServerCallbackManager能够正确处理IEntityService接口的泛型变化
**完成情况**: ✅ 已完成
- [ ] 分析WebSocketServerCallbackManager与IEntityService接口的交互
- [ ] 确保createNewEntity、findEntityTypeInInterfaces等方法能够适应新的泛型参数
- [ ] 验证invokerFindByIdMethod、invokerFindAllMethod等方法能够正确处理VO类型的返回值
- [ ] 测试WebSocket服务的整体功能
## 3. 任务执行状态
### 3.1 任务拆分执行情况
| 任务ID | 任务名称 | 状态 | 完成日期 | 备注 |
|-------|---------|------|---------|------|
| T1 | 分析现有Service类结构和依赖关系 | ✅ | - | - |
| T2 | 设计实体类和VO类之间的转换机制 | ✅ | - | - |
| T3 | 修改单个Service类的泛型参数和方法实现 | ⬜ | - | - |
| T4 | 批量修改所有注解了@CacheConfig的Service类 | ⬜ | - | - |
| T5 | 分析并处理受影响的依赖组件 | ⬜ | - | - |
| T6 | 编写测试用例并验证修改 | ⬜ | - | - |
| T7 | 更新相关文档并总结 | ⬜ | - | - |
| T10 | 分析并修改WebSocket服务组件 | ⬜ | - | - |
### 3.2 里程碑完成情况
| 里程碑 | 预期完成时间 | 实际完成时间 | 状态 | 备注 |
|-------|------------|------------|------|------|
| 需求分析和文档编写 | - | - | ✅ | 完成ALIGNMENT、CONSENSUS、DESIGN、TASK文档 |
| 试点Service类修改 | - | - | ⬜ | - |
| 批量Service类修改 | - | - | ⬜ | - |
| 依赖组件分析和修改 | - | - | ⬜ | - |
| WebSocket服务分析和修改 | - | - | ⬜ | 分析并修改WebSocketServerCallbackManager、WebSocketServerTaskManager等组件 |
| 测试验证 | - | - | ⬜ | - |
| 文档更新和总结 | - | - | ⬜ | - |
## 4. 问题和风险记录
### 4.1 已识别问题
| 问题ID | 问题描述 | 严重程度 | 解决状态 | 解决方法 |
|-------|---------|---------|---------|---------|
| P1 | Specification泛型修改带来的查询问题 | 高 | ⬜ | 需要特殊处理基于JPA实体的查询规范 |
| P2 | 数据转换可能带来的性能影响 | 中 | ⬜ | 需要优化转换逻辑,考虑缓存转换结果 |
| P3 | 依赖组件修改工作量大 | 中 | ⬜ | 需要系统地分析和处理每个依赖组件 |
| P4 | 代理对象序列化导致的懒加载问题 | 高 | ⬜ | 使用VO对象替代实体类进行缓存 |
| P5 | Redis缓存清理和数据迁移 | 中 | ⬜ | 编写脚本清理旧的实体类缓存数据 |
| P6 | VO对象序列化安全性 | 中 | ⬜ | 确保VO类实现Serializable接口避免不可序列化引用
| P7 | WebSocket服务类型处理问题 | 高 | ⬜ | WebSocketServerCallbackManager的反射调用方法需要适应IEntityService接口泛型变化
| P8 | WebSocket任务执行影响 | 中 | ⬜ | WebSocketServerTaskManager的任务执行可能受到接口泛型修改的影响
### 4.2 风险评估
| 风险ID | 风险描述 | 风险等级 | 缓解措施 |
|-------|---------|---------|---------|
| R1 | 修改后系统功能异常 | 高 | 严格按照设计文档执行,加强测试验证 |
| R2 | 数据转换导致数据不一致 | 中 | 确保转换逻辑的正确性,添加数据验证 |
| R3 | 缓存功能失效 | 中 | 详细测试缓存的读写和失效机制 |
| R4 | VO对象序列化失败 | 中 | 确保VO类实现Serializable接口避免不可序列化引用 |
| R5 | Redis连接问题影响系统稳定性 | 中 | 实现缓存降级机制确保即使Redis不可用也能正常工作 |
| R6 | 新旧缓存数据混用导致系统异常 | 中 | 实施严格的缓存清理策略确保只使用新的VO缓存数据
| R7 | WebSocket服务类型处理错误 | 高 | 详细测试WebSocketServerCallbackManager的类型处理逻辑确保createNewEntity、invokerFindByIdMethod等方法能够正确处理VO类型
| R8 | WebSocket服务任务执行失败 | 中 | 测试WebSocketServerTaskManager的任务执行流程确保任务能够正确处理VO类型的数据
## 5. 测试结果汇总
### 5.1 单元测试结果
| 测试用例 | 测试目标 | 执行结果 | 备注 |
|---------|---------|---------|------|
| - | - | - | - |
### 5.2 集成测试结果
| 测试用例 | 测试目标 | 执行结果 | 备注 |
|---------|---------|---------|------|
| - | - | - | - |
### 5.3 系统测试结果
| 测试项 | 测试内容 | 执行结果 | 备注 |
|-------|---------|---------|------|
| - | - | - | - |
## 6. 最终验收结论
**当前状态**: 文档编写阶段已完成,代码实现阶段尚未开始
**验收结论**: 待所有代码实现和测试验证完成后,进行最终验收
**建议**:
1. 在开始代码实现前,确保所有设计文档已经过评审和确认
2. 按照任务拆分计划逐步执行,每完成一个任务进行验证
3. 特别关注数据转换、依赖组件修改和缓存策略实现等关键环节
4. 充分进行测试尤其是缓存功能测试确保Redis中只存储VO对象
5. 执行Redis缓存清理操作确保不会有旧的实体类缓存数据影响系统运行
6. 验证VO对象的序列化安全性避免懒加载异常问题
---
**文档更新记录**:
- 创建日期: -
- 更新日期: -
- 更新内容: -

View File

@@ -0,0 +1,87 @@
# IEntityService接口泛型修改任务对齐文档
## 1. 项目上下文分析
### 1.1 项目结构与技术栈
- **项目**: Contract-Manager
- **模块**: server模块
- **技术栈**: Java 21, Spring Boot 3.3.7, Spring Data JPA 3.3.7, Redis (用于缓存)
### 1.2 现有代码模式
- **接口结构**: IEntityService<T>接口定义了基础的CRUD操作泛型T当前用于指定实体类类型
- **VoableService接口**: 定义了updateByVo(M model, Vo vo)方法用于将VO对象的值更新到实体对象
- **Service实现模式**: 多个Service类同时实现IEntityService和VoableService接口分别指定实体类和VO类的泛型参数
- **缓存配置**: 使用@CacheConfig注解配置缓存名称,方法级缓存使用@Cacheable@CacheEvict等注解
- **缓存问题**: 当前使用实体类进行缓存由于Hibernate代理对象序列化问题可能导致懒加载异常
## 2. 需求理解确认
### 2.1 原始需求
> server模块中注解了 @CacheConfig的Service调整接口泛型参数涉及到Service上各个方法的的修改方法修改相关引用方法的地方也要修改
### 2.1.1 扩展需求
> 使用VO替代实体缓存因为使用redis服务需要避免代理对象序列化彻底规避懒加载问题
### 2.2 边界确认
- **目标范围**: server模块中所有注解了@CacheConfig的Service类
- **修改内容**:
- Service类继承IEntityService接口泛型类型保持为Model实体类
- Service类继承QueryService接口泛型类型修改为Vo视图对象
- **影响范围**: 需要同步修改Service类中实现的接口方法的参数和返回类型
- **任务边界**: 不修改接口定义本身,只修改实现类的泛型参数和相关方法实现
### 2.3 需求理解
- 当前Service类同时实现IEntityService<Entity>和VoableService<Entity, Vo>接口部分还实现了QueryService接口
- 需要调整Service类的接口实现使IEntityService保持使用Model类型QueryService使用Vo类型
- 修改后Service类需要根据不同接口的要求实现对应的方法
- 需要确保缓存注解的键值表达式仍然有效
- 需要保证修改后系统功能正常运行
- 使用VO替代实体类进行缓存避免Hibernate代理对象序列化问题彻底规避懒加载异常
## 3. 疑问澄清
1. **数据转换问题**: 如何处理从实体类到VO的转换和从VO到实体类的转换
- 系统中已有VoableService接口提供updateByVo方法可能需要利用现有转换机制
2. **缓存键表达式**: 修改泛型后,缓存注解中的键表达式(如@CacheEvict(key = "#p0.id"))是否需要修改?
- 需要确认VO类是否与实体类具有相同的属性结构
3. **依赖影响**: 修改Service泛型后对调用这些Service的其他组件如Controller、其他Service会有什么影响
- 需要评估依赖影响范围并考虑如何处理
4. **事务处理**: 修改后事务处理是否会受到影响?
- 需要确保事务边界正确维护
5. **查询规范**: getSpecification方法如何适配从Entity到Vo的转换
- Specification是基于JPA实体类的这可能需要特殊处理
6. **缓存对象转换**: 如何确保缓存中存储的是VO对象而不是实体类对象
- 需要确保所有缓存的方法都返回VO对象并在存储前完成转换
7. **WebSocket服务影响**: WebSocketServerCallbackManager类直接调用IEntityService接口修改泛型后会对WebSocket服务产生什么影响
- 需要分析WebSocketServerCallbackManager中的类型处理逻辑确保其能够适应新的泛型参数
- 特别关注createNewEntity、findEntityTypeInInterfaces等方法这些方法依赖于IEntityService的泛型参数
8. **任务管理影响**: WebSocketServerTaskManager类中处理的任务是否会受到接口泛型修改的影响
- 需要分析任务执行过程中是否依赖于IEntityService接口的方法调用
## 4. 初步决策
基于现有项目代码分析,做出以下初步决策:
1. **泛型修改策略**: 对于每个注解了@CacheConfig的Service类将IEntityService<T>的泛型T从实体类改为对应的VO类
2. **方法适配方案**:
- 对于返回类型为T的方法需要在方法内部进行实体类到VO的转换
- 对于参数为T的方法需要在方法内部进行VO到实体类的转换
- 对于findAll等查询方法需要修改Specification的泛型类型
3. **缓存键处理**: 假设VO类与实体类具有相同的ID属性和其他缓存键中使用的属性因此缓存注解可能不需要修改
4. **依赖处理**: 需要评估并处理所有调用修改后Service的组件确保它们适应新的接口定义
5. **特殊方法处理**: 对于getSpecification等基于JPA实体的方法可能需要特殊处理或保留原有实现
6. **缓存策略**: 确保所有标注@Cacheable的方法都返回VO对象并在存储前完成从实体类到VO的转换以避免代理对象序列化问题
这些决策将在后续的共识和设计阶段进一步细化和确认。

View File

@@ -0,0 +1,100 @@
# IEntityService接口泛型修改任务共识文档
## 1. 明确的需求描述
### 1.1 基础需求
将server模块中所有注解了@CacheConfig的Service类实现的IEntityService接口的泛型参数从实体类类型修改为对应的VO类类型并同步修改这些Service类中实现的IEntityService接口的所有方法的参数和返回类型。
### 1.2 扩展需求
使用VO替代实体类进行缓存避免Hibernate代理对象在Redis序列化过程中可能导致的懒加载异常问题。
### 1.3 需求目标
通过将IEntityService接口的泛型从实体类改为VO类实现接口层与数据访问层的更好解耦并提高系统的可维护性。同时通过使用VO对象作为缓存值彻底解决Redis缓存中的代理对象序列化问题。
## 2. 验收标准
1. **功能完整性**: 修改后的Service类能够正确实现IEntityService<Vo>接口的所有方法
2. **类型一致性**: 所有方法的参数和返回类型与新的泛型参数一致
3. **缓存功能**: 缓存配置和注解在修改后仍然有效
4. **数据转换**: 正确处理实体类和VO类之间的数据转换
5. **系统兼容性**: 修改后不影响系统的其他功能模块
6. **编译通过**: 修改后的代码能够成功编译,无编译错误
## 3. 技术实现方案
### 3.1 泛型修改方案
对于每个注解了@CacheConfig的Service类
1. **修改接口声明**:
- Service类继承IEntityService接口泛型类型保持为Model实体类
- Service类继承QueryService接口泛型类型修改为Vo视图对象
2. **修改方法签名**: 同步修改所有实现的接口方法的参数和返回类型
- findById(Integer id): 根据接口不同返回不同类型IEntityService返回ModelQueryService返回Vo
- findAll: 根据接口不同参数和返回类型不同
- save: 根据接口不同参数和返回类型不同
### 3.2 数据转换策略
1. **实体到VO的转换**:
- 为每个Service类添加实体类到VO类的转换方法
- 在findById、findAll等返回VO的方法中使用转换方法将查询到的实体对象转换为VO对象
2. **VO到实体的转换**:
- 在save、delete等接收VO参数的方法中先将VO对象转换为实体对象再调用Repository进行操作
- 利用现有的VoableService接口提供的updateByVo方法进行属性映射
### 3.3 缓存注解处理
1. 假设VO类与实体类具有相同的属性结构如id、code等因此缓存注解中的键表达式@CacheEvict(key = "#p0.id")可能不需要修改。如果VO类结构不同需要相应调整缓存键表达式。
2. 确保所有标注@Cacheable的方法都返回VO对象并在存储前完成从实体类到VO的转换以避免代理对象序列化问题
3. 清除Redis中现有的实体类缓存数据确保新的缓存数据都是VO对象
### 3.4 Specification处理
由于Specification是基于JPA实体类的查询规范需要特别处理getSpecification方法
1. 如果VO类与实体类结构相似可以保留原有的Specification实现但需要修改泛型类型
2. 如果需要基于VO类属性构建查询可能需要创建新的转换逻辑
## 4. 技术约束
1. **保持接口兼容性**: 不修改IEntityService接口的定义只修改实现类
2. **数据一致性**: 确保实体类和VO类之间的数据转换不会导致数据丢失或不一致
3. **事务边界**: 确保修改不会破坏原有的事务处理逻辑
4. **性能影响**: 考虑数据转换可能带来的性能影响,必要时进行优化
5. **序列化约束**: 确保VO类是可序列化的实现Serializable接口避免在VO类中包含不可序列化的引用确保Redis缓存的序列化和反序列化性能
6. **WebSocket服务兼容性**: 确保修改后的IEntityService接口能够与WebSocketServerCallbackManager类兼容特别是createNewEntity、findEntityTypeInInterfaces等方法
7. **类型推断机制**: 确保WebSocketServerCallbackManager中的类型推断机制能够正确处理从实体类到VO类的泛型变化
## 5. 集成方案
1. **阶段性修改**: 可以按模块或按功能进行阶段性修改,降低风险
2. **依赖更新**: 同步更新所有调用修改后Service的组件确保它们使用新的接口定义
3. **测试策略**: 对修改后的Service类进行单元测试和集成测试验证功能正确性
4. **WebSocket服务适配**: 在实施修改时需要特别关注WebSocketServerCallbackManager类中的方法实现确保其能够正确处理从实体类到VO类的泛型变化
- 测试createNewEntity、findEntityTypeInInterfaces等方法在新泛型参数下的行为
- 确保invokerFindByIdMethod、invokerFindAllMethod等方法能够正确处理VO类型的返回值
5. **任务管理验证**: 验证WebSocketServerTaskManager类中的任务处理逻辑在接口泛型修改后是否正常工作特别是涉及到数据转换的部分
## 6. 任务边界限制
1. **范围限制**: 仅修改server模块中注解了@CacheConfig的Service类
2. **接口限制**: 不修改IEntityService和VoableService接口的定义
3. **不涉及功能**: 不添加新功能,仅修改现有功能的实现方式
## 7. 关键假设确认
1. **VO类结构**: 假设VO类与对应的实体类具有相似的属性结构特别是缓存键中使用的属性
2. **转换机制**: 假设系统中存在或可以添加实体类与VO类之间的转换机制
3. **依赖影响**: 假设修改Service接口不会导致不可预见的依赖问题
## 8. 项目特性规范对齐
- **代码规范**: 遵循项目现有的Java编码规范和命名约定
- **文档规范**: 按照6A工作流创建相应的文档
- **测试规范**: 为修改后的代码编写测试用例,确保功能正确
- **版本控制**: 所有修改通过版本控制系统管理,便于回溯
以上共识内容已经明确了任务的需求、验收标准、技术实现方案和约束条件,为后续的架构设计和实现阶段提供了清晰的指导。

View File

@@ -0,0 +1,353 @@
# IEntityService接口泛型修改任务设计文档
## 1. 整体架构图
```mermaid
flowchart TD
subgraph 控制器层
Controller[Controller控制器]
end
subgraph 服务层
direction LR
Service1[Service类
实现IEntityService<Vo>]
Service2[Service类
实现IEntityService<Vo>]
Service3[Service类
实现IEntityService<Vo>]
end
subgraph WebSocket服务层
WebSocketHandler[WebSocketServerHandler
处理WebSocket连接]
WebSocketTaskManager[WebSocketServerTaskManager
管理WebSocket任务]
WebSocketCallbackManager[WebSocketServerCallbackManager
处理服务调用回调]
end
subgraph 数据转换层
Mapper[实体-VO转换器
负责双向转换]
end
subgraph 数据访问层
Repository[Repository接口
操作实体类]
end
subgraph 数据层
Database[(数据库)]
end
subgraph 缓存层
RedisCache[Redis缓存
存储VO对象]
end
Controller -->|调用服务方法| Service1
Controller -->|调用服务方法| Service2
Controller -->|调用服务方法| Service3
WebSocketHandler -->|注入服务| Service1
WebSocketHandler -->|注入服务| Service2
WebSocketHandler -->|注入服务| Service3
WebSocketTaskManager -->|注入服务| Service1
WebSocketTaskManager -->|注入服务| Service2
WebSocketTaskManager -->|注入服务| Service3
WebSocketCallbackManager -->|反射调用| Service1
WebSocketCallbackManager -->|反射调用| Service2
WebSocketCallbackManager -->|反射调用| Service3
Service1 -->|转换VO到实体| Mapper
Service2 -->|转换VO到实体| Mapper
Service3 -->|转换VO到实体| Mapper
Mapper -->|转换实体到VO| Service1
Mapper -->|转换实体到VO| Service2
Mapper -->|转换实体到VO| Service3
Service1 -->|CRUD操作| Repository
Service2 -->|CRUD操作| Repository
Service3 -->|CRUD操作| Repository
Repository -->|存取数据| Database
Service1 <-->|缓存VO对象| RedisCache
Service2 <-->|缓存VO对象| RedisCache
Service3 <-->|缓存VO对象| RedisCache
%% 关键修改点
style RedisCache fill:#bbf,stroke:#333,stroke-width:2px
style WebSocketCallbackManager fill:#fbb,stroke:#333,stroke-width:2px
```
## 2. 分层设计和核心组件
### 2.1 控制器层
- **职责**: 处理HTTP请求调用Service层方法返回处理结果
- **影响**: 可能需要调整调用Service层方法的参数和返回值类型
### 2.2 服务层
- **职责**: 实现业务逻辑处理数据转换调用Repository层进行数据操作管理缓存
- **核心组件**: 所有注解了@CacheConfig的Service类
- **修改内容**:
- 将IEntityService<T>的泛型T从实体类改为VO类
- 修改实现的接口方法,添加数据转换逻辑
- 确保缓存中存储的是VO对象而非实体类对象
### 2.3 WebSocket服务层
- **职责**: 处理WebSocket连接、消息传递、任务管理和回调处理
- **核心组件**:
- WebSocketServerHandler处理WebSocket连接、消息传递和断开连接
- WebSocketServerTaskManager管理WebSocket任务的注册和执行
- WebSocketServerCallbackManager通过反射调用服务方法处理回调
- **影响**:
- WebSocketServerCallbackManager直接调用IEntityService接口泛型修改将对其产生直接影响
- 需要特别关注createNewEntity、findEntityTypeInInterfaces等方法的实现
- invokerFindByIdMethod、invokerFindAllMethod等方法需要适应VO类型的返回值
### 2.4 数据转换层
- **职责**: 负责实体类和VO类之间的数据转换
- **核心组件**:
- 现有的VoableService接口
- 新增的实体-VO转换工具方法
- WebSocketServerCallbackManager中的toVo方法
- **设计考虑**: 可以使用工具类或在每个Service类中实现转换逻辑
### 2.5 数据访问层
- **职责**: 提供对数据库的访问操作
- **核心组件**: Spring Data JPA Repository接口
- **影响**: 基本不受修改影响,仍然操作实体类
### 2.6 缓存层
- **职责**: 存储VO对象提高数据访问性能
- **核心组件**: Redis缓存
- **关键修改**: 确保只缓存VO对象避免代理对象序列化问题
## 3. 模块依赖关系图
```mermaid
flowchart TD
subgraph 接口定义
IEntityService[IEntityService<Model>
定义CRUD操作接口] --> VoableService[VoableService<M, Vo>
定义VO更新方法]
QueryService[QueryService<Vo>
定义查询操作接口]
end
subgraph 服务实现
ServiceImpl[Service实现类
实现IEntityService<Model>、QueryService<Vo>和VoableService]
end
subgraph WebSocket服务
WebSocketHandler[WebSocketServerHandler
处理WebSocket连接] --> WebSocketTaskManager[WebSocketServerTaskManager
管理WebSocket任务]
WebSocketTaskManager --> WebSocketCallbackManager[WebSocketServerCallbackManager
处理服务调用回调]
end
subgraph 数据访问
Repository[Repository接口
操作实体类]
end
subgraph 数据模型
Entity[实体类
持久化对象]
VO[VO类
视图对象]
end
subgraph 缓存
RedisCache[Redis缓存
存储VO对象]
end
IEntityService --> ServiceImpl
QueryService --> ServiceImpl
VoableService --> ServiceImpl
ServiceImpl --> Repository
Repository --> Entity
ServiceImpl --> Entity
ServiceImpl --> VO
ServiceImpl <-->|缓存VO对象| RedisCache
WebSocketHandler -->|注入| ServiceImpl
WebSocketTaskManager -->|注入| ServiceImpl
WebSocketCallbackManager -->|反射调用| IEntityService
WebSocketCallbackManager -->|类型转换| VO
style RedisCache fill:#bbf,stroke:#333,stroke-width:2px
style WebSocketCallbackManager fill:#fbb,stroke:#333,stroke-width:2px
```
## 4. 接口契约定义
### 4.1 IEntityService<Model>接口
```java
public interface IEntityService<Model> {
// 根据ID查询Model对象
Model findById(Integer id);
// 根据查询规范和分页参数查询Model对象列表
Page<Model> findAll(Specification<Model> spec, Pageable pageable);
// 根据搜索文本构建查询规范
Specification<Model> getSpecification(String searchText);
// 搜索Model对象列表默认方法
default List<Model> search(String searchText) {
throw new UnsupportedOperationException();
}
// 删除Model对象
void delete(Model entity);
// 保存Model对象
Model save(Model entity);
}
### 4.2 QueryService<Vo>接口
```java
public interface QueryService<Vo> {
// 根据查询参数和分页条件获取Vo对象列表
Page<Vo> findAll(JsonNode paramsNode, Pageable pageable);
// 计数方法
default long count(JsonNode paramsNode) {
return 0;
}
}
```
### 4.2 Service实现类接口契约
对于每个Service实现类需要实现以下方法的契约转换
| 原方法签名 | 新方法签名 | 实现逻辑 |
|---------|---------|---------|
| `Entity findById(Integer id)` | `Vo findById(Integer id)` | 1. 调用repository.findById(id)
2. 将查询到的实体对象转换为VO对象
3. 返回VO对象 |
| `Page<Entity> findAll(Specification<Entity> spec, Pageable pageable)` | `Page<Vo> findAll(Specification<Vo> spec, Pageable pageable)` | 1. 将VO的Specification转换为Entity的Specification
2. 调用repository.findAll(spec, pageable)
3. 将查询结果中的每个实体对象转换为VO对象
4. 返回包含VO对象的Page |
| `Specification<Entity> getSpecification(String searchText)` | `Specification<Vo> getSpecification(String searchText)` | 1. 构建基于Entity的Specification
2. 封装或转换为基于Vo的Specification可能需要特殊处理 |
| `void delete(Entity entity)` | `void delete(Vo entity)` | 1. 将VO对象转换为实体对象
2. 调用repository.delete(entity) |
| `Entity save(Entity entity)` | `Vo save(Vo entity)` | 1. 将VO对象转换为实体对象
2. 调用repository.save(entity)
3. 将保存结果转换为VO对象
4. 返回VO对象 |
## 5. 数据流向图
```mermaid
flowchart TD
subgraph 服务请求处理流程
B[Controller接收请求
调用Service方法] --> C[Service方法处理
接收VO参数] --> D{检查Redis缓存
中是否存在VO对象}
D -->|存在| D1[直接返回缓存中的VO对象]
D -->|不存在| D2[VO转换为Entity
准备数据操作]
D2 --> E[调用Repository
执行数据操作] --> F[Repository操作数据库
返回Entity结果]
F --> G[Entity转换为VO
准备响应数据]
G --> H[将VO对象存入Redis缓存] --> I[Service返回VO
Controller组装响应]
D1 --> I
end
subgraph WebSocket请求处理流程
W1[WebSocket客户端请求
消息传递] --> W2[WebSocketServerHandler
接收消息] --> W3[WebSocketServerTaskManager
处理任务] --> W4[WebSocketServerCallbackManager
反射调用Service方法] --> W5{检查Redis缓存
中是否存在VO对象}
W5 -->|存在| W6[直接返回缓存中的VO对象]
W5 -->|不存在| W7[Service处理请求
进行数据转换] --> W8[Entity转换为VO
准备响应数据] --> W9[WebSocketServerCallbackManager
处理VO响应] --> W10[WebSocketServerHandler
发送响应消息] --> W11[WebSocket客户端接收
VO响应数据]
W6 --> W9
end
subgraph 数据转换流程
K[VO对象] -->|属性映射| L[Entity对象
用于数据持久化]
L -->|属性映射| K
end
C --> K
D2 --> K
F --> L
G --> K
W4 --> C
W7 --> G
W9 --> K
style H fill:#bbf,stroke:#333,stroke-width:2px
style D fill:#bbf,stroke:#333,stroke-width:2px
style W5 fill:#fbb,stroke:#333,stroke-width:2px
style W9 fill:#fbb,stroke:#333,stroke-width:2px
```
## 6. 异常处理策略
1. **转换异常处理**:
- 在实体类和VO类之间进行转换时捕获并处理可能的转换异常
- 提供清晰的错误信息,指明转换失败的原因
2. **数据验证**:
- 在接收VO对象时进行数据验证确保数据的有效性
- 对于无效数据,抛出适当的异常并提供错误信息
3. **事务处理**:
- 保持原有的事务边界,确保数据操作的原子性
- 在事务中包含完整的数据操作和转换过程
4. **缓存异常**:
- 处理可能的缓存操作异常,确保即使缓存失败也不会影响业务逻辑
- 考虑添加缓存回退机制
- 特别处理Redis连接问题和序列化问题确保系统可用性
5. **序列化异常**:
- 处理VO对象序列化失败的情况
- 确保VO类实现Serializable接口避免在VO类中包含不可序列化的引用
6. **WebSocket服务异常处理**:
- 处理WebSocketServerCallbackManager中反射调用IEntityService接口时可能出现的类型转换异常
- 特别关注createNewEntity、findEntityTypeInInterfaces等依赖泛型参数的方法
- 确保WebSocket服务在接口泛型修改后能够正常处理异常情况
- 在invokerFindByIdMethod、invokerFindAllMethod等方法中添加类型安全检查
## 7. 设计原则
1. **最小化修改原则**: 仅修改必要的代码,避免不必要的重构
2. **向后兼容原则**: 尽量保持与原有系统的兼容性特别是对依赖这些Service的组件包括WebSocket服务
3. **数据一致性原则**: 确保实体类和VO类之间的数据转换不会导致数据丢失或不一致
4. **可测试性原则**: 设计支持单元测试和集成测试的代码结构包括WebSocket服务的测试
5. **性能优化原则**: 考虑数据转换可能带来的性能影响,必要时进行优化
6. **代码复用原则**: 尽量复用现有的代码和模式,特别是数据转换相关的代码
7. **序列化安全原则**: 确保所有缓存的VO对象都是可序列化的避免在VO对象中包含循环引用和不可序列化的组件
8. **类型安全原则**: 在WebSocketServerCallbackManager中添加类型安全检查确保能够正确处理从实体类到VO类的泛型变化
9. **服务兼容性原则**: 确保修改后的IEntityService接口能够与WebSocket服务和其他现有服务组件兼容
通过以上设计我们可以系统地完成IEntityService接口泛型的修改任务确保修改后的系统能够正确、高效地运行。

View File

@@ -0,0 +1,172 @@
# IEntityService接口泛型修改任务总结报告
## 1. 项目概述
本任务旨在将Contract-Manager项目server模块中所有注解了@CacheConfig的Service类实现的IEntityService接口的泛型参数从实体类类型修改为对应的VO类类型并同步修改这些Service类中实现的IEntityService接口的所有方法的参数和返回类型。同时为解决使用Redis服务时避免代理对象序列化、彻底规避懒加载问题增加了使用VO替代实体缓存的需求。
## 2. 任务目标
1. 将server模块中注解了@CacheConfig的Service类的IEntityService接口泛型参数从实体类改为VO类
2. 同步修改这些Service类中实现的IEntityService接口的所有方法的参数和返回类型
3. 实现使用VO替代实体缓存的功能避免Hibernate代理对象序列化问题
4. 确保修改后系统功能正常运行,缓存功能不受影响
5. 分析并适配WebSocket服务确保其能够正确处理IEntityService接口的泛型变化
6. 提供完整的文档说明和实施指导
## 3. 完成的工作
### 3.1 文档编写
已创建并更新了以下文档详细记录了任务的各个阶段包括VO替代实体缓存的扩展需求
1. **ALIGNMENT文档** (<mcfile name="ALIGNMENT_接口泛型修改.md" path="d:\idea-workspace\Contract-Manager\docs\task\ALIGNMENT_接口泛型修改.md"></mcfile>)
- 分析了项目上下文和现有代码模式
- 明确了需求边界和初步理解
- 提出了需要澄清的疑问和初步决策
- 添加了WebSocket服务影响的疑问澄清包括WebSocketServerCallbackManager对IEntityService接口的调用及createNewEntity等泛型依赖方法的适配问题
2. **CONSENSUS文档** (<mcfile name="CONSENSUS_接口泛型修改.md" path="d:\idea-workspace\Contract-Manager\docs\task\CONSENSUS_接口泛型修改.md"></mcfile>)
- 明确了需求描述和验收标准
- 提供了详细的技术实现方案
- 定义了技术约束和集成方案
- 添加了WebSocket服务兼容性的技术约束确保修改后的IEntityService接口与WebSocketServerCallbackManager类兼容
- 补充了WebSocket服务适配的集成方案包括测试createNewEntity等方法对VO类的处理及验证任务处理逻辑
3. **DESIGN文档** (<mcfile name="DESIGN_接口泛型修改.md" path="d:\idea-workspace\Contract-Manager\docs\task\DESIGN_接口泛型修改.md"></mcfile>)
- 绘制了整体架构图和模块依赖关系图添加了WebSocket服务层组件WebSocketServerHandler、WebSocketTaskManager、WebSocketCallbackManager及与服务层的交互关系
- 详细设计了分层结构和核心组件新增WebSocket服务层详细说明职责、核心组件及对接口泛型修改的影响
- 定义了接口契约和数据流向添加了WebSocket请求处理流程子图
- 提出了异常处理策略和设计原则新增WebSocket服务异常处理和相关设计原则
4. **TASK文档** (<mcfile name="TASK_接口泛型修改.md" path="d:\idea-workspace\Contract-Manager\docs\task\TASK_接口泛型修改.md"></mcfile>)
- 将任务拆分为7个原子子任务
- 定义了每个子任务的输入输出契约和依赖关系
- 绘制了任务依赖图
- 提供了每个子任务的详细描述
5. **ACCEPTANCE文档** (<mcfile name="ACCEPTANCE_接口泛型修改.md" path="d:\idea-workspace\Contract-Manager\docs\task\ACCEPTANCE_接口泛型修改.md"></mcfile>)
- 列出了详细的验收标准和完成情况
- 记录了任务执行状态
- 识别了潜在问题和风险
- 预留了测试结果汇总部分
### 3.2 代码分析
通过搜索工具对项目代码进行了详细分析:
1. **IEntityService接口分析**
- 接口定义:`public interface IEntityService<T>`
- 包含方法findById、findAll、getSpecification、search、delete、save
- 泛型参数T当前用于指定实体类类型
2. **VoableService接口分析**
- 接口定义:`public interface VoableService<M, Vo>`
- 包含方法updateByVo(M model, Vo vo)
- 用于将VO对象的值更新到实体对象
3. **Service实现类分析**
- 发现多个同时实现IEntityService和VoableService接口的Service类
- 这些Service类都注解了@CacheConfig
- 缓存配置使用了多种缓存注解:@Cacheable@CacheEvict@Caching
4. **WebSocket服务组件分析**
- **WebSocketServerCallbackManager**通过反射调用IEntityService接口的方法需要特别关注createNewEntity、findEntityTypeInInterfaces等依赖泛型参数的方法
- **WebSocketServerTaskManager**管理WebSocket服务的任务执行可能受到接口泛型修改的影响
- **类型处理逻辑**WebSocket服务通过反射方式调用IEntityService接口的方法接口泛型参数的修改会影响这些反射调用
## 4. 技术实现方案总结
### 4.1 泛型修改策略
对于每个注解了@CacheConfig的Service类
1. 修改接口声明:
- Service类继承IEntityService接口泛型类型保持为Model实体类
- Service类继承QueryService接口泛型类型修改为Vo视图对象
2. 同步修改所有实现的接口方法的参数和返回类型
3. 在方法内部添加实体类和VO类之间的数据转换逻辑
### 4.2 WebSocket服务适配策略
1. **类型处理逻辑适配**
- 分析WebSocketServerCallbackManager中所有调用IEntityService接口的方法
- 特别关注createNewEntity、findEntityTypeInInterfaces等依赖泛型参数的方法
- 设计适配方案确保这些方法能够正确处理新的VO泛型参数
- 添加类型安全检查,防止类型转换错误
2. **反射调用方法更新**
- 更新invokerFindByIdMethod、invokerFindAllMethod等反射调用方法
- 确保能够正确处理VO类型的返回值
- 调整反射调用的参数类型和返回类型处理逻辑
3. **任务执行流程验证**
- 验证WebSocketServerTaskManager的任务执行流程
- 确保任务能够正确处理VO类型的数据
- 添加任务执行过程中的类型检查和错误处理
### 4.3 数据转换机制
1. **实体到VO的转换**
- 在findById、findAll等返回VO的方法中将查询到的实体对象转换为VO对象
2. **VO到实体的转换**
- 在save、delete等接收VO参数的方法中先将VO对象转换为实体对象
- 利用现有的VoableService接口提供的updateByVo方法进行属性映射
### 4.4 特殊情况处理
1. **Specification处理**
- 由于Specification是基于JPA实体类的查询规范需要特别处理getSpecification方法
- 可能需要在Service类中保留基于实体类的Specification实现
2. **缓存注解处理**
- 假设VO类与实体类具有相同的属性结构缓存注解中的键表达式可能不需要修改
- 如果VO类结构不同需要相应调整缓存键表达式
### 4.5 缓存策略设计
1. **缓存对象转换**
- 所有缓存操作都使用VO对象代替实体对象
- 在缓存写入前将实体对象转换为VO对象
- 从缓存读取时直接获取VO对象无需额外转换
2. **序列化处理**
- 确保所有VO类都实现Serializable接口
- 避免在VO类中引用不可序列化的对象
- 对于集合类型使用JDK标准集合类以确保序列化兼容性
3. **Redis缓存清理**
- 在实施新策略前清理所有旧的实体类缓存
- 可以使用Redis的KEYS命令查找并删除相关缓存键
- 考虑使用命名空间或前缀区分不同类型的缓存对象
4. **缓存降级机制**
- 实现Redis连接失败时的降级策略
- 当Redis不可用时直接从数据库获取数据而不抛出异常
- 添加适当的日志记录以便监控Redis连接状态
## 5. 项目成果
1. **完整的文档体系**按照6A工作流创建并更新了全面的任务文档包括VO替代实体缓存的扩展需求和WebSocket服务适配内容
2. **清晰的实施路线**通过任务拆分提供了明确的实施步骤和依赖关系包括新增的WebSocket服务相关任务
3. **详细的技术设计**提供了架构图、接口契约、数据流向和缓存策略等技术设计内容更新了整体架构图和模块依赖关系图以包含WebSocket服务层组件
4. **完善的验收标准**定义了可衡量的验收标准和验证方法包括缓存功能的专项验收要求和WebSocket服务兼容性的验收标准
5. **问题解决方案**提供了Hibernate代理对象序列化问题和WebSocket服务兼容性问题的完整解决方案
## 6. 经验教训和改进建议
1. **风险评估**在开始代码实现前应充分评估修改可能带来的风险特别是涉及缓存机制和WebSocket服务的变更
2. **测试策略**建议采用测试驱动开发方式先编写测试用例再进行代码修改特别加强缓存功能和WebSocket服务的测试
3. **数据转换优化**:对于频繁转换的场景,考虑使用缓存或其他优化手段提高性能
4. **依赖分析**在批量修改前应进行更详细的依赖关系分析避免遗漏特别是对WebSocket服务等通过反射调用接口的组件
5. **序列化安全**在设计VO类时特别关注序列化安全性避免引入不可序列化的引用
6. **缓存管理**:建立完善的缓存管理机制,包括缓存键命名规范、过期策略和监控措施
7. **WebSocket服务优化**考虑重构WebSocket服务减少对反射的依赖提高类型安全性
8. **监控与告警**添加WebSocket服务和缓存相关的监控指标和告警机制
## 7. 最终结论
本任务已完成文档编写阶段的所有工作为后续的代码实现提供了清晰的指导。文档详细记录了需求分析、技术设计、任务拆分和验收标准包括VO替代实体缓存的扩展需求和WebSocket服务适配内容确保了任务的可执行性和可衡量性。
WebSocket服务作为系统的重要组成部分其与IEntityService接口的交互已经被详细分析并在设计文档中得到了体现。通过在文档中添加WebSocket服务相关的内容我们确保了项目团队对这部分内容有清晰的理解为后续的代码实现阶段奠定了良好的基础。
通过遵循文档中的实施路线可以系统地完成IEntityService接口泛型的修改任务解决Hibernate代理对象序列化问题并确保WebSocket服务在接口泛型修改后能够正常工作确保修改后的系统能够正确、高效、稳定地运行。

View File

@@ -0,0 +1,410 @@
# IEntityService接口泛型修改任务拆分文档
## 1. 任务拆分列表
### 1.1 任务1: 分析现有Service类结构和依赖关系
**输入契约**:
- 项目代码库访问权限
- server模块中注解了@CacheConfig的Service类列表
- WebSocketServerHandler、WebSocketServerTaskManager、WebSocketServerCallbackManager代码
**输出契约**:
- 详细的Service类结构分析报告
- Service类之间的依赖关系图
- Service类与其他组件Controller、Repository、WebSocket服务等的依赖关系分析
**实现约束**:
- 使用搜索工具分析代码结构
- 记录每个Service类的IEntityService泛型参数和VoableService泛型参数
- 记录Service类中的特殊方法和缓存配置
- 特别关注WebSocketServerCallbackManager中与IEntityService接口的交互逻辑
**依赖关系**:
- 前置任务:无
- 后置任务任务2、任务3、任务4
### 1.2 任务2: 设计实体类和VO类之间的转换机制
**输入契约**:
- 实体类和VO类的结构定义
- 现有VoableService接口的实现方式
**输出契约**:
- 详细的数据转换方案
- 转换工具类或方法的设计
- 转换异常处理策略
**实现约束**:
- 充分利用现有的转换机制
- 确保转换的安全性和效率
- 考虑空值处理和数据验证
**依赖关系**:
- 前置任务任务1
- 后置任务任务4
### 1.3 任务3: 设计缓存策略
**输入契约**:
- Service类结构分析报告
- Redis配置信息
- 现有缓存键命名规则
**输出契约**:
- 使用VO替代实体类进行缓存的策略文档
- 缓存键设计方案
- 缓存序列化与反序列化机制
- 缓存失效策略
**实现约束**:
- 确保缓存键的唯一性和可读性
- 考虑缓存大小和性能优化
- 确保缓存与数据库数据一致性
**依赖关系**:
- 前置任务任务1
- 后置任务任务4
### 1.4 任务4: 修改单个Service类的泛型参数和方法实现
**输入契约**:
- 选定的Service类文件路径
- 转换机制设计文档
- 缓存策略设计方案
- 接口契约定义
**输出契约**:
- 修改后的Service类代码
- 针对该Service类的单元测试用例
- 修改验证报告
**实现约束**:
- Service类继承IEntityService接口泛型类型保持为Model实体类
- Service类继承QueryService接口泛型类型修改为Vo视图对象
- 严格按照接口契约修改方法签名
- 正确实现数据转换逻辑
- 确保缓存注解的正确性
- 应用新的缓存策略
**依赖关系**:
- 前置任务任务2、任务3
- 后置任务任务5、任务6
### 1.5 任务5: 批量修改所有注解了@CacheConfig的Service类
**输入契约**:
- 所有需要修改的Service类列表
- 单个Service类修改的成功案例
- 转换机制设计文档
- 缓存策略设计方案
**输出契约**:
- 所有修改后的Service类代码
- 批量修改执行报告
**实现约束**:
- Service类继承IEntityService接口泛型类型保持为Model实体类
- Service类继承QueryService接口泛型类型修改为Vo视图对象
- 确保每个Service类的修改一致性
- 记录修改过程中的问题和解决方法
- 验证修改后的代码编译通过
- 统一应用缓存策略
**依赖关系**:
- 前置任务任务4
- 后置任务任务6、任务7、任务8、任务10
### 1.6 任务6: 分析并处理受影响的依赖组件
**输入契约**:
- 修改后的Service类接口定义
- 系统依赖关系分析报告
- WebSocketServerHandler、WebSocketServerTaskManager、WebSocketServerCallbackManager代码
**输出契约**:
- 受影响组件列表
- 依赖组件修改方案
- 修改后的依赖组件代码
- WebSocket服务兼容性分析报告
**实现约束**:
- 尽量减少对其他组件的影响
- 确保依赖组件能够正确调用新的Service接口
- 特别关注WebSocket服务组件的兼容性处理
- 验证依赖修改的正确性
**依赖关系**:
- 前置任务任务5
- 后置任务任务9
### 1.7 任务7: 清理Redis缓存
**输入契约**:
- Redis连接信息
- 缓存键前缀或模式
**输出契约**:
- 缓存清理记录
- Redis缓存状态报告
**实现约束**:
- 安全清除相关缓存数据,避免误删
- 记录清理的缓存键数量
- 确保清理后不影响系统运行
**依赖关系**:
- 前置任务任务5
- 后置任务任务9
### 1.8 任务8: 编写测试用例并验证修改
**输入契约**:
- 修改后的所有Service类代码
- 项目测试框架配置
- 缓存策略设计方案
- 修改后的WebSocket服务组件
**输出契约**:
- 完整的单元测试和集成测试用例
- WebSocket服务测试用例
- 测试执行报告
- 问题修复记录
**实现约束**:
- 覆盖所有修改的Service类和方法
- 测试数据转换的正确性
- 测试缓存功能的正常运行
- 确保测试覆盖率达到合理水平
- 特别验证VO缓存的有效性
- 包含WebSocket服务的兼容性测试
**依赖关系**:
- 前置任务任务5、任务10
- 后置任务任务9
### 1.9 任务9: 更新相关文档并总结
**输入契约**:
- 所有任务的执行结果
- 项目文档规范
- 缓存清理记录
- WebSocket服务修改记录
**输出契约**:
- 更新后的项目文档
- 任务总结报告
- TODO列表如果有未完成的工作
**实现约束**:
- 确保文档与代码的一致性
- 提供清晰的修改说明和总结
- 记录接口泛型修改和缓存策略变更的相关信息
- 记录WebSocket服务相关的设计和实现说明
- 记录经验教训和改进建议
**依赖关系**:
- 前置任务任务6、任务7、任务8
- 后置任务:无
### 1.10 任务10: 分析并修改WebSocket服务组件
**输入契约**:
- WebSocketServerHandler、WebSocketServerTaskManager、WebSocketServerCallbackManager代码
- 任务5的修改结果
- 任务1的Service类结构分析报告
**输出契约**:
- WebSocket服务与IEntityService接口交互分析报告
- 潜在问题和风险清单
- 修改后的WebSocketServerCallbackManager代码
- WebSocket服务测试用例
**实现约束**:
- 重点分析WebSocketServerCallbackManager中的类型处理逻辑
- 特别关注createNewEntity、findEntityTypeInInterfaces等方法
- 确保WebSocket服务能够正确处理从实体类到VO类的泛型变化
- 添加类型安全检查
- 遵循代码规范
**依赖关系**:
- 前置任务任务5
- 后置任务任务8
## 2. 任务依赖图
```mermaid
flowchart TD
subgraph 任务拆分
T1[任务1: 分析现有Service类结构]
T2[任务2: 设计转换机制]
T3[任务3: 设计缓存策略]
T4[任务4: 修改单个Service类]
T5[任务5: 批量修改Service类]
T6[任务6: 处理依赖组件]
T7[任务7: 清理Redis缓存]
T8[任务8: 编写测试用例]
T9[任务9: 更新文档并总结]
T10[任务10: 分析并修改WebSocket服务组件]
end
T1 --> T2
T1 --> T3
T2 --> T4
T3 --> T4
T4 --> T5
T5 --> T6
T5 --> T7
T5 --> T8
T5 --> T10
T10 --> T8
T6 --> T9
T7 --> T9
T8 --> T9
```
## 3. 子任务详细描述
### 3.1 任务1: 分析现有Service类结构和依赖关系
1. **执行步骤**:
- 使用搜索工具查找所有注解了@CacheConfig的Service类
- 分析每个Service类实现的接口和泛型参数
- 记录每个Service类中的缓存配置和方法实现
- 分析Service类与Repository、Controller等组件的依赖关系
2. **关键交付物**:
- Service类结构分析表
- Service依赖关系图
- 缓存配置分析报告
### 3.2 任务2: 设计实体类和VO类之间的转换机制
1. **执行步骤**:
- 分析实体类和VO类的结构差异
- 研究现有的VoableService接口的实现方式
- 设计实体类到VO类的转换方法
- 设计VO类到实体类的转换方法
- 设计转换异常处理策略
2. **关键交付物**:
- 数据转换方案文档
- 转换工具类设计
- 异常处理规范
### 3.3 任务3: 设计缓存策略
1. **执行步骤**:
- 分析现有缓存配置和使用方式
- 设计使用VO替代实体类的缓存键命名规则
- 确定缓存序列化与反序列化方案
- 制定缓存失效和更新策略
- 考虑缓存预热和批量加载机制
2. **关键交付物**:
- 缓存策略设计文档
- 缓存键命名规则
- 缓存序列化实现方案
### 3.4 任务4: 修改单个Service类的泛型参数和方法实现
1. **执行步骤**:
- 选择一个典型的Service类作为试点
- 修改类声明中的IEntityService泛型参数
- 逐一修改实现的接口方法,添加数据转换逻辑
- 应用新的缓存策略和缓存键
- 验证修改后的代码能够编译通过
- 编写单元测试验证功能正确性
2. **关键交付物**:
- 修改后的Service类代码
- 单元测试用例
- 功能验证报告
### 3.5 任务5: 批量修改所有注解了@CacheConfig的Service类
1. **执行步骤**:
- 基于任务4的成功经验制定批量修改计划
- 逐一修改每个注解了@CacheConfig的Service类
- 对每个Service类应用相同的转换机制和缓存策略
- 记录修改过程中的问题和解决方法
- 执行编译检查确保所有修改正确
2. **关键交付物**:
- 所有修改后的Service类代码
- 批量修改执行日志
- 编译验证报告
### 3.6 任务6: 分析并处理受影响的依赖组件
1. **执行步骤**:
- 使用搜索工具查找所有调用修改后Service类的组件
- 分析这些组件如何使用Service类的方法
- 根据需要修改这些组件,使其适应新的接口定义
- 验证修改后的组件能够正确与Service类交互
2. **关键交付物**:
- 受影响组件列表
- 修改后的组件代码
- 依赖验证报告
### 3.7 任务7: 清理Redis缓存
1. **执行步骤**:
- 确认需要清理的缓存键前缀或模式
- 编写Redis缓存清理脚本或工具
- 执行缓存清理操作
- 验证缓存清理结果
- 记录清理过程和结果
2. **关键交付物**:
- 缓存清理记录
- Redis缓存状态报告
### 3.8 任务8: 编写测试用例并验证修改
1. **执行步骤**:
- 为每个修改后的Service类编写单元测试
- 编写集成测试验证Service类与其他组件的交互
- 测试数据转换的正确性和性能
- 特别测试缓存功能的正常运行包括VO对象的缓存和读取
- 执行所有测试并分析结果
2. **关键交付物**:
- 完整的测试用例集
- 测试执行报告
- 问题修复记录
### 3.9 任务9: 更新相关文档并总结
1. **执行步骤**:
- 更新项目中的相关技术文档,记录接口泛型修改和缓存策略变更
- 编写任务总结报告
- 创建TODO列表记录未完成的工作或改进建议
- 归档所有任务文档
2. **关键交付物**:
- 更新后的项目文档
- 任务总结报告
- TODO列表
### 3.10 任务10: 分析并修改WebSocket服务组件
1. **执行步骤**:
- 分析WebSocketServerHandler、WebSocketServerTaskManager、WebSocketServerCallbackManager的代码
- 重点研究WebSocketServerCallbackManager中与IEntityService接口交互的方法特别是createNewEntity、findEntityTypeInInterfaces等依赖泛型参数的方法
- 分析invokerFindByIdMethod、invokerFindAllMethod等方法的实现逻辑
- 识别可能受到IEntityService泛型修改影响的代码部分
- 设计WebSocket服务组件的修改方案
- 修改WebSocketServerCallbackManager中的类型处理逻辑使其适应从实体类到VO类的泛型变化
- 添加类型安全检查确保能够正确处理VO类型
- 编写测试用例验证修改后的WebSocket服务组件
2. **关键交付物**:
- WebSocket服务与IEntityService接口交互分析报告
- 潜在问题和风险清单
- 修改后的WebSocketServerCallbackManager代码
- WebSocket服务测试用例
- 验证报告
通过以上任务拆分我们可以系统地完成IEntityService接口泛型的修改任务确保每个步骤都有明确的目标、交付物和依赖关系从而提高任务执行的效率和质量。

View File

@@ -0,0 +1,165 @@
# IEntityService接口泛型修改任务待办事项
## 1. 代码实现阶段待办
### 1.1 缓存策略设计
- [ ] 设计缓存对象转换机制在缓存写入前将实体对象转换为VO对象
- [ ] 确保所有VO类都实现Serializable接口
- [ ] 验证VO对象的序列化安全性避免引用不可序列化对象
- [ ] 设计Redis缓存键命名规范考虑使用命名空间或前缀
- [ ] 实现Redis连接失败时的降级策略
### 1.2 试点Service类修改
- [ ] 选择一个典型的Service类如CompanyCustomerFileTypeService进行试点修改
- [ ] Service类继承IEntityService接口泛型类型保持为Model实体类
- [ ] Service类继承QueryService接口泛型类型修改为Vo视图对象
- [ ] 逐一修改实现的接口方法,添加数据转换逻辑
- [ ] 验证修改后的代码能够编译通过
- [ ] 编写单元测试验证功能正确性
### 1.2 批量Service类修改
- [ ] 制定批量修改计划,按照模块或功能分组
- [ ] 逐一修改每个注解了@CacheConfig的Service类
- [ ] Service类继承IEntityService接口泛型类型保持为Model实体类
- [ ] Service类继承QueryService接口泛型类型修改为Vo视图对象
- [ ] 应用统一的数据转换机制
- [ ] 记录修改过程中的问题和解决方法
- [ ] 执行编译检查确保所有修改正确
## 2. 数据转换相关待办
### 2.1 转换逻辑实现
- [ ] 设计并实现实体类到VO类的转换方法
- [ ] 设计并实现VO类到实体类的转换方法
- [ ] 考虑添加通用的转换工具类
- [ ] 处理空值和异常情况
### 2.2 Specification处理
- [ ] 研究如何处理getSpecification方法的泛型修改
- [ ] 确定是否需要保留基于实体类的Specification实现
- [ ] 设计可能的解决方案,如创建适配器或转换层
## 3. 依赖组件分析和修改
### 3.1 依赖分析
- [ ] 搜索所有调用修改后Service类的组件Controller、其他Service等
- [ ] 分析这些组件如何使用Service类的方法
- [ ] 识别需要修改的依赖组件
- [ ] 特别关注WebSocket服务组件WebSocketServerCallbackManager、WebSocketServerTaskManager
- [ ] 分析WebSocket服务如何通过反射调用IEntityService接口的方法
- [ ] 识别WebSocket服务中依赖IEntityService泛型参数的方法
### 3.2 依赖修改
- [ ] 修改受影响的Controller类
- [ ] 修改受影响的其他Service类
- [ ] 验证依赖修改的正确性
- [ ] 处理可能的级联依赖问题
- [ ] 修改WebSocketServerCallbackManager类
- [ ] 更新createNewEntity、findEntityTypeInInterfaces等依赖泛型参数的方法
- [ ] 调整invokerFindByIdMethod、invokerFindAllMethod等反射调用方法
- [ ] 确保能够正确处理VO类型的返回值
- [ ] 修改WebSocketServerTaskManager类
- [ ] 确保任务执行流程能够适应IEntityService接口的泛型变化
- [ ] 调整任务处理逻辑确保能够正确处理VO类型的数据
- [ ] 添加类型安全检查,防止类型转换错误
- [ ] 验证WebSocket服务组件修改的正确性
## 4. 测试和验证待办
### 4.1 测试用例编写
- [ ] 为每个修改后的Service类编写单元测试
- [ ] 编写集成测试验证Service类与其他组件的交互
- [ ] 测试数据转换的正确性和性能
- [ ] 编写缓存功能专项测试用例
- 验证Redis中只存储VO对象不存储实体对象
- 测试VO对象的序列化和反序列化正确性
- 测试Redis连接失败时的降级功能
- 测试缓存清理后的系统运行状态
- [ ] 编写WebSocket服务专项测试用例
- 测试WebSocketServerCallbackManager的类型处理逻辑
- 验证createNewEntity、invokerFindByIdMethod等方法能够正确处理VO类型
- 测试WebSocketServerTaskManager的任务执行流程
- 验证WebSocket服务的整体功能
### 4.2 测试执行和问题修复
### 4.2 测试执行和问题修复
- [ ] 执行所有测试用例
- [ ] 分析测试结果,记录发现的问题
- [ ] 修复测试中发现的问题
- [ ] 重新执行测试,确保所有问题都已解决
## 5. 配置和部署相关待办
### 5.1 Redis缓存清理
- [ ] 制定Redis缓存清理计划
- [ ] 编写脚本查找并删除所有旧的实体类缓存
- [ ] 确保在新代码部署前完成缓存清理
- [ ] 验证清理效果,确保没有旧缓存残留
### 5.2 缓存配置检查
- [ ] 验证缓存配置在修改后仍然有效
- [ ] 检查缓存键表达式是否需要调整
- [ ] 测试缓存的读写和失效机制确保只使用VO对象
### 5.2 部署准备
- [ ] 准备部署文档,说明修改内容和注意事项
- [ ] 考虑分阶段部署策略,降低风险
- [ ] 准备回滚方案,以防出现严重问题
## 6. 文档更新待办
### 6.1 代码文档更新
- [ ] 为修改后的Service类添加JavaDoc注释
- [ ] 更新相关接口和类的文档
- [ ] 确保文档与代码的一致性
### 6.2 项目文档更新
- [ ] 更新ACCEPTANCE文档记录测试结果和完成情况
- [ ] 更新FINAL文档添加实际执行结果
- [ ] 归档所有任务文档
## 7. 其他待办事项
### 7.1 缓存管理机制建立
- [ ] 建立缓存键命名规范文档
- [ ] 定义缓存过期策略
- [ ] 设置Redis监控措施定期检查缓存状态
- [ ] 建立缓存清理和刷新的标准流程
### 7.2 性能优化
- [ ] 分析数据转换可能带来的性能影响
- [ ] 考虑添加转换结果缓存或其他优化手段
- [ ] 进行性能测试,确保修改不会导致性能退化
### 7.2 知识分享
- [ ] 组织团队成员进行知识分享,介绍修改内容和技术方案
- [ ] 记录经验教训,为后续类似任务提供参考
- [ ] 考虑是否需要更新项目开发规范
## 8. 支持需求
以下是在实施过程中可能需要的支持:
### 8.1 技术支持
- [ ] 数据转换框架选择和实现建议
- [ ] Specification泛型修改的最佳实践
- [ ] 缓存配置优化建议
- [ ] Redis缓存管理和序列化最佳实践
- [ ] 分布式缓存问题排查和解决支持
### 8.2 资源支持
- [ ] 代码审查资源
- [ ] 测试环境和测试数据准备
- [ ] 部署和监控资源
### 8.3 其他支持
- [ ] 与相关团队的协调和沟通
- [ ] 变更管理和审批流程支持
- [ ] 风险评估和缓解策略建议
---
**更新记录**:
- 创建日期: -
- 更新日期: -
- 更新内容: -