2013-03-27 10 views
7

Ho visto molto su EventStores ma tutti gli articoli sono associati a parlare di CQRS.EventStore senza CQRS

Vogliamo utilizzare EventStores per integrare contesti limitati, ma vogliamo attenerci all'ORM tradizionale per la lettura/scrittura di aggregati, per evitare il comando/query e il modello di lettura separato che nel nostro caso aggiungerebbe troppa complessità.

Visto che è così popolare parlare di entrambi i concetti insieme si è portati a credere che siano destinati a vivere insieme - ci sono insidie ​​di fare un 'lite' di EventStore senza CQRS, rispetto all'implementazione di EventStores per aggregati/CQRS/read -modello anche?

+1

Per poter utilizzare l'approccio di evento di archivio, è sorta necessario disporre di un sistema in cui tutte * le operazioni sui dati che cambia * sono causati da una comando e risultato in un evento (che puoi quindi memorizzare e riprodurre). Questo è abbastanza naturale in un ambiente CQRS - ma non vedo alcun motivo per cui non si possa creare un tale sistema da soli - basta disciplina per gestire tutte le modifiche dei dati tramite comandi ed eventi di incendio per segnalare cosa è è accaduto. –

risposta

4

Correre a NoSql Distilled - risparmierai un sacco di tempo senza fare niente per qualche giorno, ma leggendo e cercando di capire cosa stai cercando. Se stai "leggendo/scrivendo aggregati" dovresti considerare database come RavenDB il più importante in questo.

Nota che il tag evento-store è per l'evento di archivio JOliver, ed ha come principali nozioni architettoniche

Hai anche cose un po 'indietro nel che per arrivare alla produzione di eventi, il vostro dominio viene costruito in un particolare modo per facilitare questo. le cose principali che contrastano con il modo di porre le cose nella sua domanda (per parafrasare male e/o ingiustamente: voglio usare archivio eventi solo per gli eventi di archivio - posso fare il resto io stesso)

  1. eventi vengono dosati per aggregato - la sua vera unità di gestione degli eventi

  2. invio a qualcosa.

Esaminare le soluzioni di gestione delle code se non si desidera un modello di dominio di origine evento. Questa è una cosa molto legittima da fare - non fingere che Event Store sia una sottocoda di un pub di eventi generalizzato.

Avere il progetto Dispatcher in Denormalizer che crea un modello di lettura è un po 'facile: puoi usare tutti i tipi di cose esotiche ma usare uno strumento familiare come un SQL SB con un livello di database semplice come PetaPoco andrà bene.

Avete effettivamente fatto un picco con CommonDomain e EventStore? Hai letto il documento readme nel nuget? Hai guardato i video JOliver di ?

+0

Ruben, grazie per la preziosa risposta, ho trovato un video http://vimeo.com/31153808 puoi per favore collegarmi ad altri (hai detto che c'erano 2) - non riesci a trovare l'altro! – g18c

+0

@ g18c modificato in. IIRC quello che hai trovato è il migliore singolo, ma gli altri valgono la pena di vedere –

+0

Grazie per quei link - sì il video è ottimo e mi ha aiutato molto a capire. Poiché joliver ha scritto il codice in un modo così metodico, non sarà molto costoso implementare comandi e gestori poiché probabilmente mi farà risparmiare molto tempo nella mappatura ORM. Ho scaricato una rapida demo (con un leggero problema) http://stackoverflow.com/questions/15723640/why-is-my-command-event-string-field-being-retrieved-as-null ma finora molto impressionato da questa libreria – g18c

1

vogliamo usare EventStores per integrare contesti limitati

E 'possibile utilizzare un negozio di evento come una coda di messaggi con l'ulteriore vantaggio che è persistente e un nuovo abbonato può richiedere tutti gli eventi passati .

ma vuole attaccare con ORM tradizionale per leggere/scrivere aggregati, per evitare il comando/query e lettura modello separato che nel nostro caso sarebbe aggiungere troppa complessità.

Per inciso, si può ancora raggiungere alcuni dei benefici di CQRS semplicemente usando un separato read-model per le query, piuttosto che il vostro modello comportamentale.

Nel complesso, è possibile utilizzare un EventStore senza utilizzare event sourcing, tuttavia è necessario assicurarsi che supporti tutti i requisiti del proprio scenario di integrazione. È possibile che siano necessari altri componenti oltre a un archivio eventi. Più in generale, un archivio eventi può essere utilizzato per memorizzare dati di serie temporali.