时间: 2025年06月09日 19:56
任务类型: 代码重构
状态: 已完成
Game模块中存在多处$rewardType类型判断的重复性硬编码,用于处理奖励描述等工作,不利于维护。需要进行统一处理,消除重复代码,提升代码维护性。
getTargetName方法在多个类中重复实现app/Module/Game/Models/GameRewardGroup.phpapp/Module/Game/Models/GameRewardItem.phpapp/Module/Game/AdminControllers/Actions/RandomRewardAction.phpapp/Module/Game/AdminControllers/LazyRenderable/RandomRewardResultLazyRenderable.phpapp/Module/Game/AdminControllers/GameRewardGroupController.phpapp/Module/Game/AdminControllers/GameRewardItemController.phpapp/Module/Game/Services/RewardGroupService.php文件: app/Module/Game/Services/RewardTypeDescriptor.php
主要功能:
核心方法:
// 获取奖励目标名称
public static function getTargetName(int $rewardType, int $targetId, int $param1 = 0, int $param2 = 0): string
// 从RewardItemDto获取目标名称
public static function getTargetNameFromDto(RewardItemDto $item): string
// 从GameRewardItem模型获取目标名称
public static function getTargetNameFromModel(GameRewardItem $item): string
// 格式化奖励项显示
public static function formatRewardDisplay(int $rewardType, int $targetId, int $quantity, int $param1 = 0, int $param2 = 0, bool $withBadge = true): string
// 格式化数量文本(支持随机数量)
public static function formatQuantityText(GameRewardItem $item): string
文件: app/Module/Game/Enums/REWARD_TYPE.php
新增功能:
// 获取奖励类型的详细信息
public static function getTypeInfo(int $type): array
提供每种奖励类型的详细描述信息,包括:
getTargetName和formatQuantityText方法,使用统一描述器getTargetName方法,直接调用描述器formatRewardItems方法,删除重复的getTargetName方法原代码中存在硬编码的皮肤名称:
这些名称是捏造的,不符合SKIN枚举的实际定义。
修改皮肤名称获取逻辑,使用SKIN枚举的正确方法:
修改前:
return [
1 => '默认皮肤',
2 => '春日皮肤',
3 => '夏日皮肤',
4 => '秋日皮肤',
];
修改后:
return \App\Module\Game\Enums\SKIN::getValueDescription();
这样会根据SKIN枚举中的注释自动生成正确的皮肤名称:
本次重构成功解决了Game模块中奖励类型处理的重复性硬编码问题:
这次重构为后续的功能开发和维护奠定了良好的基础,体现了"DRY(Don't Repeat Yourself)"原则的重要性。