本次重构将URS包的Request机制从"一个类处理多种请求"改为"一个Request类只完成一种请求"的设计原则,提高了代码的可维护性和扩展性。
原有的UrsRequest类使用switch语句处理多种操作:
protected function handler(array $params): array
{
$action = $params['action'] ?? '';
switch ($action) {
case 'register':
return $this->handleRegister($params);
case 'deposit':
return $this->handleDeposit($params);
case 'withdraw':
return $this->handleWithdraw($params);
case 'check':
return $this->handleCheck($params);
default:
throw new \Exception("不支持的操作类型: {$action}");
}
}
每个API操作都有对应的专用Request类:
class UrsGetUserInfoRequest extends BaseRequest
{
protected function handler(array $params): array
{
// 只处理获取用户信息的逻辑
// 验证userKey参数
// 调用URS API
// 返回用户信息
}
}
class UrsGetUserTeamRequest extends BaseRequest
{
protected function handler(array $params): array
{
// 只处理获取用户团队关系的逻辑
// 验证userId参数
// 调用URS API
// 返回团队关系数据
}
}
class UrsGetUserLevelCountRequest extends BaseRequest
{
protected function handler(array $params): array
{
// 只处理获取用户下级统计的逻辑
// 验证userId和level参数
// 调用URS API
// 返回统计数据
}
}
class UrsRegisterRequest extends BaseRequest
{
protected function handler(array $params): array
{
// 只处理用户注册的逻辑
// 验证user_id和username参数
// 调用URS API
// 返回注册结果
}
}
class UrsDepositRequest extends BaseRequest
{
protected function handler(array $params): array
{
// 只处理充值操作的逻辑
// 验证user_id、amount、order_id参数
// 调用URS API
// 返回充值结果
}
}
class UrsWithdrawRequest extends BaseRequest
{
protected function handler(array $params): array
{
// 只处理提取操作的逻辑
// 验证user_id、amount、order_id参数
// 调用URS API
// 返回提取结果
}
}
class UrsCheckBalanceRequest extends BaseRequest
{
protected function handler(array $params): array
{
// 只处理余额检查的逻辑
// 验证user_id参数
// 调用URS API
// 返回余额信息
}
}
创建UrsService类来统一管理所有Request类的调用:
class UrsService
{
public static function getUserInfo(string $userKey): array
{
$request = new UrsGetUserInfoRequest();
return $request->request(['userKey' => $userKey]);
}
public static function getUserTeam(int $userId): array
{
$request = new UrsGetUserTeamRequest();
return $request->request(['userId' => $userId]);
}
public static function getUserLevelCount(int $userId, int $level): array
{
$request = new UrsGetUserLevelCountRequest();
return $request->request(['userId' => $userId, 'level' => $level]);
}
// ... 其他方法
}
Request/
└── UrsRequest.php # 处理所有操作的单一类
Request/
├── UrsGetUserInfoRequest.php # 获取用户信息
├── UrsGetUserTeamRequest.php # 获取用户团队关系
├── UrsGetUserLevelCountRequest.php # 获取用户下级统计
├── UrsRegisterRequest.php # 用户注册
├── UrsDepositRequest.php # 充值操作
├── UrsWithdrawRequest.php # 提取操作
└── UrsCheckBalanceRequest.php # 余额检查
Services/
└── UrsService.php # 统一服务类
$request = new UrsRequest();
$result = $request->request([
'action' => 'userInfo',
'userKey' => 'user_key_here'
]);
// 方式一:直接使用Request类
$request = new UrsGetUserInfoRequest();
$result = $request->request(['userKey' => 'user_key_here']);
// 方式二:使用统一服务类(推荐)
$result = UrsService::getUserInfo('user_key_here');
本次重构是破坏性更新,不兼容旧的调用方式。如果有现有代码使用了旧的UrsRequest类,需要按照新的方式进行调整。
已创建TestUrsRequestCommand命令来验证重构后的功能:
# 测试所有Request类
php artisan thirdparty:test-urs-request
# 测试特定类型
php artisan thirdparty:test-urs-request --type=userinfo
php artisan thirdparty:test-urs-request --type=team
php artisan thirdparty:test-urs-request --type=count
php artisan thirdparty:test-urs-request --type=register
本次重构显著提高了URS包的代码质量和可维护性,为后续的功能扩展奠定了良好的基础。建议其他第三方包也采用类似的设计原则进行开发。