PHP - DI-контейнер в REST-клиенте - PullRequest
2 голосов
/ 03 апреля 2012

Я пытаюсь создать базовый REST-клиент на PHP как способ познакомиться с концепцией контейнера внедрения зависимостей.В конечном итоге я хотел бы сделать что-то вроде:

$client = new RestClient();
$client->getService('user', array('id, optional fields...'));

Но я также хочу иметь возможность указать, какой объект должен обрабатывать запрос (например, если я хочу использовать fopen вместо curl).

Согласно тому, что я прочитал до сих пор, правильным способом достижения этого будет:

$request = new ServiceDefinition( 
    'Curl', 
    array('...') 
); 
$user = new ServiceDefinition('User',  
    array(new ServiceReference('request')) 
); 
$container = new ServiceContainer(array( 
    'request' => $request, 
    'user'    => $user, 
));

Мой вопрос: существует ли более простой способ построения зависимости между объектом пользователяа объект запроса?(может быть, базовая установка в RestClient ()?)

Заранее спасибо.

1 Ответ

0 голосов
/ 03 апреля 2012

В зависимости от того, насколько вы знакомы с Dependency Injection, использование DI-контейнера может привести к серьезным последствиям.Короче говоря, безусловно, можно заменить контейнер простым вводом сеттера:

interface HttpAdapterInterface {}
class CurlAdapter implements HttpAdapterInterface {}
class SocketAdapter implements HttpAdapterInterface {}

class RestClient {
    public function setHttpAdapter(HttpAdapterInterface $adapter) {
        // ...
    }
}

У Fabien Potencier есть хорошая серия на DI , вторая часть которой охватывает контейнеры DI (и когдаиспользовать их).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...