2025年5月6日
优化宠物模块的暂存系统,包括创建DTO基类、优化暂存数据结构、改进跨模块数据访问方式,以及合并重复代码。
UCore/Dto/BaseDto.php 基类,为所有DTO提供基础功能Arrayable、JsonSerializable、Jsonable 和 Serializable 接口toArray()、fromArray()、toJson() 等通用方法serialize() 和 unserialize() 方法,支持对象序列化fromCache() 静态方法,用于从缓存中恢复DTO对象数组clone() 和 isEmpty() 等辅助方法PetStatusTempDto:包含完整宠物数据,用于 PetCreatedEvent 和 PetUpdateEvent 事件PetDataSimpleTempDto:包含简化宠物数据,用于 PetStatusChangedEvent 事件getUserPetStatus、getUserPetCreated 和 getUserPetUpdates 方法,使用 fromCache() 方法处理缓存数据PetTemp 类,使用 PetService::getPetStatus() 方法获取宠物数据handlePetFullData 方法,用于处理宠物完整数据事件handlePetCreated 和 handlePetUpdate 方法,使它们使用通用方法PetUpdateEvent 事件PetUpdateEvent 类,结构与 PetCreatedEvent 一致PetLogic 类的 levelUpPet 和 remouldPet 方法中触发该事件问题:跨模块直接访问Model导致模块间耦合度高 解决方案:使用服务层方法获取数据,避免直接访问Model
问题:代码重复,handlePetCreated 和 handlePetUpdate 逻辑相似
解决方案:创建通用的 handlePetFullData 方法,减少代码重复
问题:缓存中存储数组而非对象,导致类型信息丢失 解决方案:实现序列化接口,直接在缓存中存储DTO对象
BaseDto 的继承本次优化工作主要围绕DTO基类创建、暂存数据结构优化、跨模块数据访问改进和代码重复合并四个方面进行。通过这些优化,宠物暂存系统的代码更加简洁、类型安全、模块化和可维护。特别是直接在缓存中存储DTO对象的改进,使得代码更加面向对象,减少了数组和对象之间的转换,提高了代码的可读性和可维护性。