控制反转?

今年准备毕业,到公司实习,接手了一些代码,但存在一些疑惑,同事也不是很了解。
主要问题是这样的,公司做游戏,游戏平台需要使用多个sdk。
比如说登录:

统一接口
$sdkManager = SdkManager::resolve();
$resp = $sdkManager->login();

SdkManager 使用服务提供者注册了门面

$this->app->singleton('sdk_manager', function () {
    return new SdkManager();
});
class SdkManager
{
    protected $managers = [];

    /**
     * @param null $sdk_type
     * @param $data
     * @return mixed
     * @throws Exceptions
     */
    public  function resolve($sdk_type = null){
        $sdk_type = $sdk_type ?: request('sdk_type');
        if (isset($this->managers[$sdk_type])) {
            return new $this->managers[$sdk_type];
        }
        throw new Exceptions(Exceptions::SDK_MANAGER_NOT_FOUND);
    }
}

根据request中的参数去实例化不同的SDK实现类(这些类也都实现了SDK的契约)

namespace App\Contracts;
interface  SdkManage
{
    public function login();
    public function pay();
    public function generateSign(array $data = [], $orderId = null, $os = null);
}

各式各样的实现类都实现SdkManage?
因为一些隐私问题,实现类都有对应的key(有点奇怪,不写在env里)


我想咨询一些

  • 这算不算是一种控制反转?
  • SdkManager中managers不应该是空数组吗,按道理不应该是抛出异常吗?为什么会进入到if里,实例化SDK
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

回答一:这算是一种反转控制
回答二: 这里需要你断点调试或者打印数组

4年前 评论
讨论数量: 3

是不是漏掉一些代码?从上面看 $managers 肯定为空啊。 你运行打印一下 $managers 看一下。

4年前 评论

回答一:这算是一种反转控制
回答二: 这里需要你断点调试或者打印数组

4年前 评论

嗯呢 谢谢大家 是我漏了一点,有另一个文件,在服务提供者boot()的时候进行了配置读取赋值。
另外我想问问大家 关于这种多个sdk的有没有更好的,更加规范的的写法?

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!