Compatibilità con le versioni precedenti di event-sourcing

3

Come fai a essere retrocompatibile con l'event-sourcing? Diciamo che rilasci una versione che ha un tipo di evento, chiamiamola X. Sai come gestire quell'evento in tutti i sistemi che estrae gli eventi dalla fonte dell'evento. In una versione successiva si modifica l'evento X o lo si elimina, come si fa a rimanere indietro con questo?

Per avere un sistema pienamente funzionante devi essere in grado di gestire il vecchio evento nello stesso momento in cui devi gestire la versione aggiornata. O se elimini quel tipo di evento, allora sarai bloccato con un codice che è lì solo per gestire eventi legacy che a mio avviso possono essere un po 'complicati a lungo termine.

    
posta Tomas Jansson 28.11.2011 - 09:37
fonte

2 risposte

8

IMHO non c'è nulla che cambi davvero un evento - se ciò accade hai davvero creato un nuovo tipo di evento. Una volta che un evento è accaduto in produzione, è successo.

Il modo più semplice per gestire ciò è la versione degli eventi e un 'event upgradeer' da qualche parte nella pipeline prima che gli eventi vengano applicati: lo facciamo subito dopo la deserializzazione degli eventi. In questo modo l'applicazione deve solo conoscere l'ultima versione degli eventi. L'upgrade può tradurre qualsiasi attributo modificato, rimuovere quelli non utilizzati o applicare valori predefiniti sensibili se ne aggiungi uno.

    
risposta data 28.11.2011 - 13:21
fonte
1

Questa è la ragione per un sistema disaccoppiato. I contratti dovrebbero esistere tramite un'interfaccia con sistemi consumabili sia internamente che esternamente.

Se il sistema sta propagando un nuovo evento, allora il codice dovrebbe essere regolato di conseguenza per consumare il nuovo evento, se necessario. Se il vecchio evento viene inserito in un tipo di argomento, il gestore deve operare come prima, a meno che non abbiate introdotto nuove proprietà all'interno dell'argomento, il che costringerebbe comunque la necessità di apportare una modifica all'interno del gestore.

Puoi prepararti solo a un determinato livello prima di prepararti per qualcosa che potrebbe non venire e il tempo perso potrebbe essere stato speso meglio altrove.

    
risposta data 28.11.2011 - 15:16
fonte

Leggi altre domande sui tag