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,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服务在接口泛型修改后能够正常工作确保修改后的系统能够正确、高效、稳定地运行。