2013-12-17 9 views
1

В моем приложении я получаю список продуктов через запрос api. Для перечисления продукта на каждой странице мне нужно выполнить один и тот же запрос api каждый раз с параметром userid в качестве параметра. Это увеличит нагрузку на сервер, поэтому, чтобы этого избежать, мне нужно получить список продуктов и повторно использовать экземпляр.Инъекция зависимостей в ZF2

Как я могу реализовать это с помощью одного вызова, представив контейнер DI или Dependency Container.

Или есть ли другой способ для этого? я не хочу использовать сеанс или базу данных

+1

DI совершенно неправильный механизм для рассмотрения этой проблемы. DI - это просто акт инъекции зависимости ($ thing = new Thing ($ dependancy) или $ thing-> setOtherThing ($ dependancy)) и не имеет ничего общего с сохранением нагрузки на сервер. Контейнер DI - это просто волшебный черный ящик, который будет выполнять эти операции для вас, и все равно не уменьшит нагрузку на сервер и не начнет работать с плохо реализованным контейнером. На что вы должны смотреть, является кэширование, как в одном ответе, который в настоящее время прилагается к этому вопросу, что приведет к сокращению числа запросов веб-службы – Bittarman

+0

Или есть ли какой-либо другой механизм для этого? – guny

+0

Как определить контейнер зависимостей как singleton в zf2. Как и где инициализировать? Вышеприведенный сценарий является лишь примером. С единственным клиентским подключением, как мы можем ограничить соединение после его установки. Например, если мы запрашиваем соединение db, соединение должно быть сделано как singleton на клиента. Кэширование - для данных. я говорю о установленном соединении или пусть говорят созданные объекты – guny

ответ

1

Хороший подход - использовать кеш. Например:

// your service 
public function getProducts($id) 
{ 
    if ($cache = $this->cache->hasItem($id)) { 
     return $this->cache->getItem($id); 
    } 

    // call api 
    $result = $this->api->call($id); 
    $this->cache->setItem($id, $result); 

    return $result; 
} 

Например кэша можно использовать Zend \ Cache

Смежные вопросы