2014-01-21 108 views
0

我班有一個單獨的依賴(狂飲),這樣的構造是這樣的:隱藏類依賴

public function __construct(Client $client) 
{ 
    $this->_client = $client; 
} 

然而,這個類的用戶將必須知道狂飲和實例化類這樣:

$client = new \Guzzle\Http\Client(); 
$service = new Service($client); 

我不希望最終用戶關心這種依賴關係,也許在未來,甚至添加額外的HTTP客戶服務類可以選擇。什麼是最好的做法來「隱藏」這種依賴性?

回答

1
  • 這就是依賴注入容器可以幫助用戶(不是你,圖書館開發人員)的地方。

DIC會照顧創建和注入依賴項,用戶只會得到你的服務的一個實例,而不關心它是如何創建的。

但是,這很容易說,但你不能去強迫你的用戶使用DIC。因此,另一種解決方案是:

  • 創建一個「工廠」類,將創建您的服務:

例子:

class MyServiceFactory 
{ 
    public function create(Client $client = null) 
    { 
     $client = $client ?: new Client(...); 
     return new MyService($client); 
    } 
} 
+0

謝謝馬修,我想我會與工廠解決方案去。 – arnaslu