2014-01-21 87 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