Utilizzo del design basato sul dominio e creazione di eventi ...
Dato che ho una tabella di 3 colonne: (A, B, C) con una riga di dati esistente: (1, 2, 3), quando aggiorno la riga per contenere i valori (1000, 2, 3) e Eseguo uno strumento progettato per acquisire le modifiche ai dati ed emettere eventi associati, quale di questi dovrei aspettarmi dal payload dell'evento emesso?
-
{date: 1234, newState: (1000, 2, 3)}
-
{date: 1234, prevState: (1, 2, 3), newState: (1000, 2, 3)}
-
{date: 1234, prevState: (1, 2, 3), newState: (1000, 2, 3)}, changed: (1,0,0)}
-
{date: 1234, newState: (1000, 2, 3), changed: (1,0,0)}
-
{date: 1234, changedData: (A: 1000)}
-
{date: 1234, changedData: (A: 1000), previousData: (A: 1)}
"Idealmente" vorrebbe che il design degli eventi supportasse un'ampia varietà di usi attuali e futuri, tra cui:
- replica dei dati
- registrazione di controllo
- attività attivate da eventi
- inserimento di eventi retroattivi (eventualmente)
I miei pensieri:
- La risposta 1. sopra è la più semplice, ma i clienti che non si preoccupano della colonna "A" finiscono comunque per dover reagire a questo evento, poiché non possono sapere dall'evento stesso cosa è cambiato.
- Risposta 5. sopra è il più pulito - cattura solo la "differenza". Lo svantaggio è che costringe il cliente a caricare le modifiche per visualizzare un registro di controllo dello stato completo su ogni modifica. Anche le attività attivate da eventi potrebbero richiedere la conoscenza dello stato completo per funzionare.
- La risposta 4. sopra è forse più generalmente utile? Trasporta ciò che è cambiato, ma alcune informazioni contestuali a fianco.
- Risposta 2. sopra cade in una trappola di affermare ciò che era lo stato precedente. Cosa succede se questo non è lo stato precedente nel tuo datastore, forse in un ambiente di test? Respingi l'evento come non valido? Inserire in modo retroattivo un evento significa cambiare tutti i campi "previousState" degli eventi successivi?