In CQRS con Event Sourcing, se il dominio corrente manca di una funzionalità, quindi deve essere esteso con un nuovo comando (inviato da una nuova saga) e un evento (inviato dal gestore aggregato di quel comando), come posso distribuire tale funzione su un'applicazione già in esecuzione se il comando non è mai stato inviato prima e quindi anche l'evento non è mai stato parte del registro eventi fino alla distribuzione.
L'evento è essenziale per la corretta inizializzazione di aggregazione, quindi ho bisogno di avere l'evento nel registro eventi per ogni possibile situazione in passato in cui questo comando / evento avrebbe dovuto essere inviato.
Poiché il registro eventi deve essere solo accodato. C'è un modo come aggiungere un evento al flusso di eventi passati se la distribuzione di tale funzionalità lo richiede? Va bene farlo manualmente? O qual è il modo.
Esempio
Per essere più precisi sul mio problema: considera un'applicazione per file system, in cui sono presenti aggregati per file (File) e cartelle (Cartella). Singoli file e cartelle (entrambi chiamati nodi) sono radici aggregate. Non riesco a memorizzare l'intero albero del file system in una singola radice a causa delle prestazioni.
Nella vecchia versione, se creo un nuovo file in una cartella, si tratta di un comando su File aggregate in cui imposto la sua cartella padre (la proprietà dell'aggregato). Ora mi sono reso conto che mi piacerebbe avere una lista di ID dei nodi che contiene una cartella. Questa funzione non faceva parte della versione originale, quindi le cartelle non avevano idea dei nodi che erano stati memorizzati nella cartella.
La mia soluzione era di creare una saga avviata dall'evento NewFileCreated, che avrebbe inviato un nuovo comando AddFileToFolder all'aggregazione della cartella principale. Quel comando applicherebbe un evento (FileAddedToFolder) nella cartella che aggiungerebbe l'ID del file al suo insieme di nodi figli.
Per implementare questa funzione, in cui mi piacerebbe avere gli ID figli corretti in tutte le cartelle, è limitato dall'assenza di questi eventi nel registro eventi originale.
Quale dovrebbe essere il modo di aggiornare il vecchio registro eventi in quel caso?