J2EE模式-控制反轉

long2ge發表於2021-12-17

定義

IoC是對框架的一個特徵的描述。是指框架代替應用程式設計師成為主程式的角色,控制整個系統的資源和流程。

理解

IOC沒有說明具體是怎樣的實現的。它只是說明主程式的控制許可權,從應用程式設計師轉換成框架而已。
控制 : 對系統資源和流程的控制許可權。
反向 : 對系統資源和流程的控制, 從應用程式設計師轉換成框架了。

實現方式

  1. 依賴注入 Dependence Inversion - DI
  2. 服務定位器 Service Locator - SL
  3. 依賴查詢

DI

在依賴注入中,IOC容器生成依賴並且把依賴傳遞到資源中。

結構中包含的角色

  1. IocContainer (IOC容器)
  2. Resource (具體資源)
  3. ResourceDependent (資源依賴)

最小可表達程式碼

class ResourceDependent {}
class Resource 
{
    public function __construct(ResourceDependent $resourceDependent){}
}

// 這種方式就是依賴注入
$resource = new Resource(new ResourceDependent);

Service Locator

  1. 在服務定位中,資源呼叫服務定位器獲取依賴,資源的依賴轉移到服務定位器中。
  2. 該模式強調的是 服務或元件統一在服務定位器中 註冊,定位,排程,使用。

結構中包含的角色

  1. ServiceLocator (服務定位器)
  2. Resource (具體資源)
  3. ResourceDependent (資源依賴)

最小可表達程式碼

class ResourceDependent {}

class ServiceLocator
{
    public static function getService(String $serviceKey)
    {
    //  省略一堆業務。。。
    return new new ResourceDependent();
    }
}

class Resource
{
    private $resourceDependent;

    public function __construct()
    {
        // 控制反轉 - 控制權轉移到服務定位器
        $this->resourceDependent = ServiceLocator::getService('服務的key');
    }
}

Service Locator 和 DI結合使用

YII2.0 中 Service Locator把 物件建立和獲取例項的部分 外包給了DI容器。
本作品採用《CC 協議》,轉載必須註明作者和本文連結
Long2Ge

相關文章