CQRS - как обработать новые таблицы отчета (или: как импортировать ВСЮ историю из хранилища события),

Я изучил некоторые демонстрационные реализации CQRS (Java / .NET), которые используют событие, получающее в качестве хранилища события и простого (Никакие) хранилища SQL как 'хранилище отчета'.

Взгляды вся польза, но я, кажется, пропускаю что-то во всех демонстрационных реализациях.

Как обработать добавление новых хранилищ отчета / экраны, после того, как приложение вошло в производство? и как импортировать существующие (последние) данные от хранилища события до нового хранилища отчета?

Т.е.:

Вообразите основной DDD/CQRS управляемым приложением CRM. Каждый экран (представление действительно) имеет свое собственное структурированное хранилище отчета (таблица SQL). Все эти представления обновляются с помощью обработчиков, слушающих доменные события (CustomerCreated / CustomerHasMoved, и т.д.).

Одна функция CRM - то, что она может зарегистрировать телефонные вызовы (событие PhoneCallLogged). Из-за ограничений времени мы только реализовали журналирование телефонных вызовов в V1 CRM (просмотр и создание отчетов того, кто обработал, какой телефонный вызов будет реализован в V2),

После времени, работая в производстве, мы хотим реализовать 'создание отчетов' зарегистрированных телефонных вызовов на клиента и торгового представителя.

Таким образом, мы должны добавить некоторые экраны (представления) и таблицы отчета о поддержке (в хранилище отчета) и заполнить его данными, уже собранными в конечном счете Хранилище...

Это - то, где я застреваю при рассмотрении образцов, я учился. Они не обрабатывают импорт существующих (история) данные от хранилища события до (нового) хранилища отчета.

Все выборки EventRepository (DomainRepository) только имеют метод 'GetById' и 'Добавляют', они не поддерживают вкладывание ВСЕХ совокупных корней однажды для заполнения новой таблицы отчета.

Без этого импорта исходных данных новые экраны только обновляются для недавно произошедших событий. Не для телефонных вызовов, уже зарегистрированных (потому что не было никакого слушателя отчета для события PhoneCallLogged),

Какие-либо предложения, рекомендации?

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

Remco

12
задан Remco Ros 1 April 2010 в 08:37
поделиться

2 ответа

Вы повторно запускаете обработчик в существующем журнале событий (например, вы воспроизводите старые события через новый обработчик событий)

Рассмотрим пример .. У вас в журнале событий есть тонна PhoneCallLoggedEvents. Возьмите свои новые ручки и сыграйте через них все старые события. В таком случае он как будто всегда был запущен и просто продолжит обрабатывать любые новые поступающие события.

Ура,

Грег

8
ответ дан 2 December 2019 в 22:04
поделиться

EventRepository содержит только эти методы, потому что они нужны вам только в производственной среде.

При добавлении новой денормализации для отчетов вы можете отправлять все события с самого начала вашему обработчику.

Вы можете сделать это на своем сайте разработки следующим образом:

  • Загрузите журнал событий на сайт разработчиков
  • Отправьте все события в обработчик денормализации
  • Переместите новый обработчик view + на рабочий сайт
  • Запускать события, которые произошли между
  • . Теперь вы готовы
1
ответ дан 2 December 2019 в 22:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: