Кеширование данных, "архитектура"

Yaponchick

Новичок
Здравствуйте.

Вопрос: Как правильно организовать функции кеширования?

Суть:
- Есть API резольвящий имена в ID, пример: ссылка
- Есть API резольвящий ID в имена, пример: ссылка

Пытаюсь сделать кеширование ID, Name локально в MySQL, чтобы не грузить апи/сайт, но запутался во внутренней зависимости + DRY. Данные от пользователя приходят в двух типах айди или нейм, поэтому:

PHP:
function byNames($names = array()) { ... }
function byIDs($ids = array()) { ... }

function query($type, $argument, $data) { ... } # отправка запроса + парсинг хмл

function cacheGetByNames($names = array) { ... }
function cacheGetByIDs($names = array) { ... }
function cacheSave($id, $name) { ... } # сохранение в MySQL
Вариант №1:

PHP:
function byNames() {
  cacheGetByNames()
}

function cacheGetByNames() {
  if (not_cached_in_mysql) {
    $ret = query(...);
    cacheSave($ret);
  } else {
    $ret = get_from_mysql()
  }

  return $ret;
}
получаем пугающую зависимость в cacheGetByNames()

Вариант №2:

PHP:
function byNames($names) {
  $ret = cacheGetByNames();

  foreach ($names as $n) {
    if (!isset($ret[$n]) {
      $data = query(..., $n);
      cacheSave($data);
      $ret[$n] = $data;
    }
  }
}
получаем гарантированный запрос, если имя не существует...

Вариант №N: Может Вы подскажете?

P.S. Получается что мой вопрос: Кто должен сохранять данные в кеш: cacheGetByNames или byNames?
 

WMix

герр M:)ller
Партнер клуба
один метод только сохраняет, один метод только читает,--модель
один решает откуда читать куда сохранять -- контроль
 
Сверху