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