Il sourcing di eventi viene lanciato come bonus per un numero di cose, ad es. cronologia degli eventi/audit trail, rigenerazione completa e coerente delle visualizzazioni, ecc. Sembra fantastico. Sono un fan. Ma questi sono dettagli di implementazione sul lato di lettura, e si potrebbe ottenere lo stesso spostando completamente l'archivio eventi sul lato di lettura come un altro sottoscrittore .. quindi perché no?Perché l'archivio eventi dovrebbe essere sul lato scrittura?
Ecco alcuni pensieri:
- I punti di vista/denormalizers stessi non si preoccupano di un negozio di evento. Gestiscono solo eventi dal dominio.
- Spostare l'archivio eventi sul lato lettura fornisce ancora cronologia eventi/controllo
- È ancora possibile rigenerare le visualizzazioni dall'archivio eventi. Tranne ora non deve essere una perdita di modello di scrittura. Dategli leggere la cittadinanza del modello!
Qui sembra essere un argomento tecnico per tenerlo sul lato della scrittura. Questo da Greg Young a http://codebetter.com/gregyoung/2010/02/20/why-use-event-sourcing/:
Ci sono tuttavia alcuni problemi che esistono con l'utilizzo di qualcosa che sta memorizzando un'istantanea dello stato corrente. Il problema più grande ruota attorno al fatto che hai introdotto due modelli per i tuoi dati. Hai un modello di eventi e un modello che rappresenta lo stato corrente.
La cosa che trovo interessante in questo è il termine "istantanea", che più recentemente è diventato un termine distinto anche in caso di sourcing di eventi. L'introduzione di un archivio eventi sul lato scrittura aggiunge un sovraccarico al caricamento degli aggregati. Puoi discutere su quanta overhead, ma è apparentemente un problema percepito o previsto, poiché ora c'è il concetto di caricamento di aggregati da un'istantanea e tutti gli eventi dallo snapshot. Quindi ora abbiamo ancora ... due modelli. E non solo, ma i suggerimenti per l'istantanea che ho visto sono pensati per essere implementati come una perdita di infrastruttura, con un processo in background che si estende all'intero archivio dati per mantenere le prestazioni.
E dopo aver scattato un'istantanea, gli eventi prima dello snapshot diventano inutilizzabili al 100% dalla prospettiva di scrittura, ad eccezione di ... per ricostruire il lato di lettura! Sembra sbagliato.
Un altro argomento correlato alle prestazioni: archiviazione di file. A volte abbiamo bisogno di allegare file binari di grandi dimensioni alle entità. Concettualmente, a volte questi sono associati alle entità, ma a volte sono le entità. Inserirli nell'archivio eventi significa che devi caricare fisicamente quei dati ogni volta che carichi l'entità. È già abbastanza brutto, ma immagina diverse o centinaia di queste in un grande aggregato. Ogni risposta che ho visto a questo è fondamentalmente mordere il proiettile e passare un uri al file. Questo è un limite e mina il sistema distribuito.
Poi c'è manutenzione. La ricostruzione delle viste richiede un processo che coinvolge l'archivio eventi. Così ora ogni attività di manutenzione di una vista che tu abbia mai scritto lega ulteriormente il tuo modello di scrittura all'uso dell'archivio degli eventi .. per sempre.
Non è l'intero punto della CQRS che i casi d'uso attorno al modello di lettura e al modello di scrittura sono fondamentalmente incompatibili? Quindi, perché dovremmo mettere il materiale in lettura sul lato della scrittura, sacrificando flessibilità e prestazioni, e accoppiandoli nuovamente. Perché passare il tempo?
Quindi, tutto sommato, sono confuso. Sotto tutti gli aspetti, da dove mi siedo, il negozio di eventi ha più senso come un dettaglio del modello letto. Continuerai a ottenere i numerosi vantaggi di mantenere un negozio di eventi, ma non eccessivamente la persistenza del lato di scrittura, possibilmente riducendo flessibilità e prestazioni.E non si accoppiano il backup di lettura/scrittura con le astrazioni che perdono e le attività di manutenzione.
Quindi qualcuno potrebbe spiegarmi uno o più motivi validi per tenerlo sul lato della scrittura? O in alternativa, perché non dovrebbe andare sul lato di lettura come un problema di manutenzione/segnalazione? Ancora una volta, non sto mettendo in dubbio l'utilità del negozio. Proprio dove dovrebbe andare :)
anche l'istantanea con gli eventi non è un "nuovo concetto" questo è stato nel mio primo discorso sull'origine degli eventi nel 2006 :) –