Я изучил некоторые примеры реализации CQRS (Java / .Net), которые используют источник событий в качестве хранилища событий и простые (нет) хранилища SQL в качестве «хранилища отчетов».
Выглядит все хорошо, но мне кажется, что-то не хватает во всех примерах реализации.
Как справиться с добавлением новых хранилищ / экранов отчетов после запуска приложения? и как импортировать существующие (последние) данные из хранилища событий в новое хранилище отчетов?
Т.е.:
Представьте себе базовое приложение CRM, управляемое DDD / CQRS.
Каждый экран (на самом деле представление) имеет свое собственное хранилище структурированных отчетов (таблица SQL).
Все эти представления обновляются с использованием обработчиков, прослушивающих события домена (CustomerCreated / CustomerHasMoved и т. Д.).
Одна особенность CRM заключается в том, что он может регистрировать телефонные звонки (событие PhoneCallLogged). Из-за нехватки времени мы реализовали регистрацию телефонных звонков только в V1 CRM (просмотр и отчетность о том, кто обрабатывал, какой телефонный звонок будет реализован в V2)
Через некоторое время после запуска мы хотим внедрить «отчетность» о зарегистрированных телефонных звонках для каждого клиента и торгового представителя.
Итак, нам нужно добавить несколько экранов (представлений) и вспомогательных таблиц отчетов (в хранилище отчетов) и заполнить их данными, уже собранными в хранилище событий ...
Вот где я застреваю, глядя на образцы, которые я изучал. Они не обрабатывают импорт существующих (исторических) данных из хранилища событий в (новое) хранилище отчетов.
Все примеры EventRepository (DomainRepository) имеют только методы «GetById» и «Add», они не поддерживают получение ВСЕХ агрегатных корней за один раз для заполнения новой таблицы отчета.
Без этого первоначального импорта данных новые экраны обновляются только для вновь возникших событий. Не для уже зарегистрированных телефонных звонков (потому что не было прослушивателя отчетов для события PhoneCallLogged)
Есть предложения, рекомендации?
Заранее спасибо,
РЕМКО