OK sto per aggiungere una risposta rapida, davvero bisogno di più dettagli sul tuo caso particolare per spiegare penso.
Non dovresti mai riscrivere eventi negli archivi di eventi.
Gli eventi nel negozio dovrebbero essere immutabili e non cambiare mai.
Se si verifica un evento che non è corretto, è necessario creare un evento di correzione che si applica all'oggetto.
vale a dire:
- account create
- ritiro modifica saldo a - £ 100
- correzione dell'errore saldo corretto a - £ 90
Leggendo tra le righe della tua domanda, penso che tu stia confondendo gli eventi tenuti nello store, con le azioni che si verificano in risposta a quegli eventi.
In questo caso probabilmente abbiamo un evento di ritiro e un servizio di calcolo del saldo che risolve il problema. diciamo che il servizio di calcolo del saldo ha un errore in cui non si aggiunge un supplemento di £ 10 a tutti i prelievi e si desidera modificare la logica per risolvere il problema.
Tuttavia, il tuo problema è che tu costruisci lo stato dell'oggetto dagli eventi nello store, quindi se l'applicazione di tale evento di ritiro include la chiamata al servizio per elaborare il nuovo saldo, cambiare l'implementazione di quel servizio cambierà la cronologia di tutti i tuoi oggetti.
quindi il tuo evento di ritiro v1 si presenta come
withdraw(amount = £90)
ma viene salvato come
withdrawal
amount = £90
new balance = -£100
il tuo ritiro v2 viene sostituito da
withdraw(amount = £90, applyCharges = false)
ma viene salvato come
withdrawal
amount = £90
applyCharges = false
new balance = -£90
durante la costruzione dell'oggetto dall'archivio eventi viene utilizzato il nuovo valore di bilanciamento anziché chiamare il servizio per calcolare il nuovo saldo