moro/indexer-common

A library that provides common classes for entities indexer

0.5.0 2018-07-11 10:59 UTC

README

Задачей данного пакета является создание индексов со сложными условиями, в том числе с теми что изменяются со временем. Примером может служить сущность с параметрами времени начала и окончания её активности. В зависимости от этого она может добавляться или удаляться из определённых индексов. В качестве второго примера будет индекс распределения сущностей по возрастной категории их авторов.

Для упрощения использования пакета в него добавлен компонент для хранения представлений сущности. Его использование позволяет получать по индексу не только идентификаторы сущностей но и конкретные их представления. Например, анонс материала, состоящий из картинки, заголовка, лида, автора, иконки автора. Это представление требует достаточно разной информации и, следовательно, когда оно уже подготовленно и его не надо формировать, мы получаем экономию ресурсов сервера.

Фасады

Предназначены для использования в приложении. Каждый из них используется как публичное API для конкретной задачи.

  • MonolithFacade - для работы непосредственно с хранилищем. Т.е. когда данный индексатор встроен в приложении.
  • ClientFacade - клиентский API при работе в связке приложение - сервис.
  • BackendFacade - API для фонового процесса сервиса.

Компоненты пакета

  1. Accessory - общие типажи (traits).
  2. Bus - адаптер внешней шины для обмена сообщениями между клиентским приложением и фоновым процессом сервиса.
  3. Configuration - классы для создания дерева объектов по данным из некой конфигурации.
  4. Dispatcher - менеджер событий пакета.
  5. Exception - интерфейсы для дополнительной группировки исключений компонентов.
  6. Index - компонент отвечающий за хранение, получение и обновление записей индексов.
  7. Integration - классы для интеграции пакета с некоторыми DI контейнерами.
  8. Regulation - менеджер определения принадлежности сущности к конкретным индексам и представлениям.
  9. Scheduler - планировщик заданий на будущее время.
  10. Source - компонент для взаимодействия с внешними источниками сущностей.
  11. Strategy - классы определяющие порядок действий при вызове API методов.
  12. Transaction - вспомогательный компонент, отвечающий за транзакционность действий с хранилищами данных.
  13. View - компонент отвечающий за формирование и хранение представлений сущности.

Интеграция

  • Для начала необходимо определить или написать классы взаимодействия с адаптерами и хранилищами.
  • После этого подключаем классы пакета к используемому DI контейнеру.
  • Создаём тип сущности и пишем классы для работы с ней (нормализаторы, инструкции, представления).
  • По необходимости добавляем декораторы и слушателей для компонентов пакета.

Version 0.5.0