隐藏最终用户的类依赖关系

时间:2014-01-21 08:40:11

标签: php dependency-injection

我的类有一个依赖(Guzzle),所以构造函数看起来像这样:

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

但是,这个类的用户必须知道Guzzle并实例化这样的类:

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

我不希望最终用户关注这种依赖关系,也许将来甚至可以选择添加额外的HTTP客户端服务类。什么是“隐藏”这种依赖的最佳做法?

1 个答案:

答案 0 :(得分:1)

  • 这是依赖注入容器可以帮助用户的地方(不是您,图书馆开发人员)。

DIC将负责创建和注入依赖项,用户只需获取服务实例,而不关心它是如何创建的。

然而,这很容易说,但你不能强迫用户使用DIC。所以另一种解决方案是:

  • 创建一个“工厂”类,用于创建您的服务:

示例:

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