Ho studiato alcune implementazioni di esempio CQRS (Java/.Net) che utilizzano il sourcing di eventi come archivio eventi e un semplice (No) SQL memorizza come 'archivio rapporti'.CQRS: come gestire le nuove tabelle di report (o: come importare TUTTA la cronologia dall'archivio eventi)
Sembra tutto a posto, ma mi sembra che manchi qualcosa in tutte le implementazioni di esempio.
Come gestire l'aggiunta di nuovi archivi/schermate di report, dopo che un'applicazione è entrata in produzione? e come importare i dati (più recenti) esistenti dall'archivio eventi al nuovo archivio report?
Ie:
immaginare una base DDD/CQRS guidati applicazione CRM. Ogni schermata (visualizza realmente) ha il proprio archivio di report strutturati (una tabella SQL). Tutte queste visualizzazioni vengono aggiornate mediante gestori che ascoltano gli eventi del dominio (CustomerCreated/CustomerHasMoved, ecc.).
Una funzione del CRM è che può registrare le chiamate telefoniche (evento PhoneCallLogged). A causa dei limiti di tempo, abbiamo implementato solo la registrazione delle chiamate telefoniche in V1 del CRM (visualizzazione e segnalazione di chi ha gestito quale telefonata verrà implementata in V2)
Dopo un periodo di rodaggio, vogliamo implementare il ' segnalazione di chiamate telefoniche registrate per cliente e rappresentante commerciale.
quindi abbiamo bisogno di aggiungere alcune schermate (vista) e le tabelle dei rapporti di sostegno (nel negozio report) e riempirlo con i dati già raccolti nello Store Event ...
è lì che mi si blocca guardando i campioni che ho studiato. Non gestiscono l'importazione dei dati esistenti (cronologia) dall'archivio eventi a un (nuovo) archivio rapporti.
Tutti gli esempi di EventRepository (DomainRepository) hanno solo un metodo 'GetById' e 'Aggiungi', non supportano il recupero di TUTTE le radici aggregate una sola volta per riempire una nuova tabella di report.
Senza questa importazione iniziale di dati, le nuove schermate vengono aggiornate solo per gli eventi appena verificati. Non per le chiamate telefoniche già registrate (perché non c'era nessun listener di report per l'evento PhoneCallLogged)
Eventuali suggerimenti, consigli?
Grazie in anticipo,
Remco
Quindi, in pratica è necessario integrare una sorta di one-time corridore evento (rapporto impor t) nel processo di distribuzione? –
E avrai bisogno dell'accesso "Query" al negozio degli eventi: store.GetAllEvents(); Questo sembra contro-intuitivo perché (come ho detto) Tutte le implementazioni di un EventStore che ho visto (entrambi .net/java) non consentono tale accesso in lettura ... –
Di solito le implementazioni fornite contengono solo ciò che è necessario in fase di runtime, ma non ciò che è necessario per la manutenzione. – thinkbeforecoding