2012-10-01 12 views
9

In base allo http://cre8ivethought.com/blog/2009/11/12/cqrs--la-greg-young il componente responsabile della pubblicazione di eventi che utilizza un editore di eventi è il repository.Perché il repository CQRS pubblica eventi, non l'archivio eventi?

La mia domanda è semplicemente: perché è così?

In questo post ci viene detto che:

Il repository di dominio è responsabile della pubblicazione degli eventi, questo sarebbe normalmente all'interno di una singola transazione insieme con la memorizzazione degli eventi in negozio evento.

Mi sarei aspettato che questo fosse un compito dell'archivio degli eventi: una volta che un evento (o più eventi) è stato archiviato, è pubblicato.

Quindi perché è nel repository?

risposta

9

Il modello di dominio non è a conoscenza del meccanismo di memorizzazione. D'altro canto, è necessario assicurarsi che gli eventi appropriati vengano pubblicati, non importa se si utilizza un archivio eventi, un archivio SQL classico o qualsiasi altro mezzo di persistenza.

Se ci si affida all'archivio eventi per pubblicare gli eventi, si avrebbe un accoppiamento stretto con il meccanismo di archiviazione.

+0

Poiché la memorizzazione della manifestazione e la pubblicazione di tale evento deve essere un'operazione atomica, pur evitando 2PC, e come lei ha ricordato, la pubblicazione di quegli eventi shouldn essere responsabile dell'archivio sottostante, è la soluzione per utilizzare piuttosto una tabella DB per memorizzare l'evento mentre si imposta un indicatore "non pubblicato". Un altro processo legge gli eventi contrassegnati come "non pubblicati" da quella tabella e quindi li pubblica, dopodiché viene impostato il marcatore e la transazione è stata eseguita? In questo caso, il polling di quella tabella per eventi non pubblicati è il modo per ottenere questo risultato? – CraigM

2

Memorizzare e pubblicare l'evento deve essere un'istruzione atomica perché se una delle due azioni fallisce, gli ascoltatori di questo evento non saranno sincronizzati con il produttore dell'evento.

Esiste un'altra soluzione (più costosa) rispetto alla pubblicazione dell'evento dall'archivio eventi, che consiste nell'utilizzare le transazioni 2pc (commit a due fasi).

si possono trovare alcune informazioni più intereting qui: https://cqrs.wordpress.com/documents/building-event-storage/

Problemi correlati