Я создаю клиента с помощью 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 и процесс установки. Но пользователь всегда должен использовать клиентскую фабрику.
Тогда есть ли лучший (шаблон) дизайн для этой проблемы?
Задача ещё не решена.
Других решений пока нет …