Создайте объект с зависимостями, которые должны быть настроены

Я создаю клиента с помощью GuzzleHttp 5.3. Я хочу использовать то же самое Config объект для настройки Guzzle Client. Итак, создание Guzzle Client зависит от объекта Config,

Например:

$config = new Config([
'user' => 'github',
'password' => '1234',
'base_url' => 'http://test_or_production_url.com'
]);

new GithubClient($config, new \GuzzleHttp\Client());

И конструктор:

public function __construct(Config $config)
{
$this->authData = [
'uname'     => $config->getUser(),
'upassword' => $config->getPassword(),
];

$this->config       = $config;
$this->httpClient   = new \GuzzleHttp\Client(['base_url' => $config->getBaseUrl());
// I have to setup default headers, too.
}

Но я должен ввести Guzzle Client потому что я должен сделать модульные тесты.

Одним из вариантов является введение Guzzle Client настроен так, как требует мой клиент. Но процесс сборки немного громоздок (установите base_url, заголовок по умолчанию). Пользователь должен знать, используя пропивать, Мне это не нравится.

Другой вариант — создать новый объект (GithubClientFactory например) создать мой клиент.

$client = GithubClientFactory::make($config);

Итак, я скрываю зависимость от Guzzle и процесс установки. Но пользователь всегда должен использовать клиентскую фабрику.

Тогда есть ли лучший (шаблон) дизайн для этой проблемы?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector