06-162221-宠物暂存系统优化.md 3.7 KB

宠物暂存系统优化工作日志

日期

2025年5月6日

工作内容概述

优化宠物模块的暂存系统,包括创建DTO基类、优化暂存数据结构、改进跨模块数据访问方式,以及合并重复代码。

详细工作内容

1. 创建和优化DTO基类

  • 创建了 UCore/Dto/BaseDto.php 基类,为所有DTO提供基础功能
  • 实现了 ArrayableJsonSerializableJsonableSerializable 接口
  • 添加了 toArray()fromArray()toJson() 等通用方法
  • 添加了 serialize()unserialize() 方法,支持对象序列化
  • 添加了 fromCache() 静态方法,用于从缓存中恢复DTO对象数组
  • 添加了 clone()isEmpty() 等辅助方法

2. 优化暂存数据结构

  • 使用两种不同的DTO类型存储不同类型的事件数据:
    • PetStatusTempDto:包含完整宠物数据,用于 PetCreatedEventPetUpdateEvent 事件
    • PetDataSimpleTempDto:包含简化宠物数据,用于 PetStatusChangedEvent 事件
  • 直接在缓存中存储DTO对象,而不是转换为数组,提高代码简洁性和类型安全性
  • 修改了 getUserPetStatusgetUserPetCreatedgetUserPetUpdates 方法,使用 fromCache() 方法处理缓存数据

3. 改进跨模块数据访问

  • 修改了 PetTemp 类,使用 PetService::getPetStatus() 方法获取宠物数据
  • 避免跨模块直接访问Model,遵循模块化设计原则
  • 确保数据访问通过服务层进行,提高代码的可维护性

4. 合并重复代码

  • 创建了通用的 handlePetFullData 方法,用于处理宠物完整数据事件
  • 修改了 handlePetCreatedhandlePetUpdate 方法,使它们使用通用方法
  • 减少了代码重复,提高了代码的可维护性

5. 创建 PetUpdateEvent 事件

  • 创建了新的 PetUpdateEvent 类,结构与 PetCreatedEvent 一致
  • 用于表示宠物数据发生重大变更,如升级、洗髓、重置等场景
  • PetLogic 类的 levelUpPetremouldPet 方法中触发该事件

技术要点

  1. DTO设计模式:使用数据传输对象封装数据,提供类型安全和方法封装
  2. 序列化与缓存:实现序列化接口,支持对象在缓存中的存储和恢复
  3. 模块化设计:通过服务层访问数据,避免跨模块直接访问Model
  4. 代码复用:通过抽取通用方法减少代码重复
  5. 事件驱动设计:使用事件系统实现模块间的松耦合通信

遇到的问题及解决方案

  1. 问题:跨模块直接访问Model导致模块间耦合度高 解决方案:使用服务层方法获取数据,避免直接访问Model

  2. 问题:代码重复,handlePetCreatedhandlePetUpdate 逻辑相似 解决方案:创建通用的 handlePetFullData 方法,减少代码重复

  3. 问题:缓存中存储数组而非对象,导致类型信息丢失 解决方案:实现序列化接口,直接在缓存中存储DTO对象

后续工作

  1. 考虑为其他模块的DTO类也添加对 BaseDto 的继承
  2. 完善单元测试,确保暂存系统的正确性
  3. 考虑添加缓存过期策略,避免缓存数据过多
  4. 更新相关文档,确保开发团队了解新的设计和使用方式

总结

本次优化工作主要围绕DTO基类创建、暂存数据结构优化、跨模块数据访问改进和代码重复合并四个方面进行。通过这些优化,宠物暂存系统的代码更加简洁、类型安全、模块化和可维护。特别是直接在缓存中存储DTO对象的改进,使得代码更加面向对象,减少了数组和对象之间的转换,提高了代码的可读性和可维护性。