2017-01-12 1 views
1

Хорошо, я создаю приложение, используя три уровня для управления бизнес-логикой.Место слоя кэширования в архитектуре служебной ориентации

1) Первый уровень решения транспортных задач. Слой посылает запросы, получает ответы и обрабатывает сетевые ошибки. Транспортный уровень вызывает методы удаленного API и готовит данные для использования внутри приложения.

2) Второй слой - Service. Сервис - это класс (или группа функций) для управления конкретными данными из API для его организации в соответствии с бизнес-требованиями. Например, ProductService отображает список продуктов, затем денормализует каждый из них на объект и сортирует коллекцию.

3) И третий слой - это Controller. Этот слой является классическим слоем от шаблона MVC. Он относится к службе данных и передает ее на уровень View.

В результате мы получаем схему взаимодействия:

Controller => Service => Transport

Очевидно, что эта схема требует хранения результата от транспортного уровня сервиса кэширования (такие как Memcached). Поэтому необходимо добавить четвертый слой - Cache.

Итак, в каком месте в этой схеме должен быть расположен слой Cache, и какой из трех слоев выше должен его контролировать (скажем, извлечение данных из кеша или получение из API, недействительность кеша и т. Д.)?

Мой вопрос концептуальный вопрос, и его не требует указаний конкретных технологий, однако я хочу, чтобы получить ответ в контексте из PHP и Symfony 2/3 рамок.

+0

Вопрос широкий и зависит от деталей ваших услуг. На мой взгляд, Cache не является слоем, а оболочкой вокруг некоторого уровня или портом/контрактом для вашего фактического кеша. Это может быть транспортное промежуточное ПО, если вам нужно полностью кэшировать некоторые запросы, или это может быть оберткой вокруг вашего сервиса ... – Ziumin

ответ

1

Я постараюсь ответить общим способом. Когда вы кэшировать некоторые данные, вы должны сделать две вещи

  • Когда запрос на чтение сделано, вы сначала проверить, если элемент, который вам нужен присутствует в кэше. Если он затем прочитает его из кеша. Если нет, то получите его из исходного источника (в большинстве случаев базы данных), сохраните его в кеше и верните элемент.
  • Другое, когда вам нужно манипулировать предметом. Затем вы обновите свою базу данных, а затем замените элемент в кеше, чтобы никто не читал устаревшие данные.

Как правило, система будет иметь общий уровень для чтения и записи в базу данных, а кэширование выполняется вокруг этого слоя.

В вашем случае кажется, что сервисный уровень - это тот, который управляет вашими объектами, поэтому должен быть слой, вокруг которого должно выполняться кэширование.

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