Я пытаюсь создать базовый клиент REST в PHP, чтобы как-то познакомиться с концепцией контейнера для инъекций зависимостей. В конце концов, я хотел бы сделать что-то вроде:PHP - контейнер DI в клиенте REST
$client = new RestClient();
$client->getService('user', array('id, optional fields...'));
Но я также хочу, чтобы быть в состоянии определить, какой объект должен обработать запрос (если я хочу использовать FOPEN вместо завитка, например).
Согласно тому, что я читал до сих пор, правильный способ достижения этой цели будет:
$request = new ServiceDefinition(
'Curl',
array('...')
);
$user = new ServiceDefinition('User',
array(new ServiceReference('request'))
);
$container = new ServiceContainer(array(
'request' => $request,
'user' => $user,
));
Мой вопрос: есть ли более простой способ построить зависимость между объектом пользователя и запрос объект? (базовая инъекция установщика на RestClient(), может быть?)
Заранее спасибо.
У меня все еще есть вопрос, если вы не против. Если у меня есть функция getUser ($ id) 'в моей функции класса RestClient, которая возвращает объект User, как я могу избежать сильной связи между классами RestClient и User, если я не использую контейнер DI? –
Вот где контейнер DI может работать хорошо. Я бы попросил модель User взять контейнер под названием «Resolver», который по существу работает как адаптер для того, как пользовательский класс получает идентификатор. Затем у вас есть конкретный «RestClientResolver», который содержит ваш клиент REST и знает, как его использовать, чтобы получить пользователей по ID. – cmbuckley
Не могли бы вы показать мне, как вы представляете себе экземпляр пользователя, рассматривающий ваше сообщение выше? Извините, если это звучит как глупый запрос, но я совершенно новичок в этих хороших практиках в oop. –