CQRS

CQRS

CQRS med ElasticSearch

_DSC0365Elasticsearch

Når data gemmes i ElasticSearch, sker det ved hjælp af en struktur kaldet et dokument. Hvert dokument består af de felter man som bruger kommer med, samt et antal faste felter. Ét af disse felter er et id der unikt identificerer dokumentet og kan, fra grænsefladens side, bruges til at lave opdateringer og overskrivninger af dokumentet. Under overfladen foregår tingene lidt anderledes. Lucene, der…

Introduktion til CQRS og event sourcing #6

I det forrige indlæg viste jeg Cirqus’ konfigurations-API, som helt objektivt set i høj grad kan klassificeres som “lækker”, måske endda “herre-nice”. Nu skal vi snakke lidt mere om event-processering – eller “projektioner”, som det også kaldes – altså det her, der sker med events efter at de er blevet genereret. “Projektioner” er i dette eksempel begrænset til views, altså materialiserede read-modeller i en…

Introduktion til CQRS og event sourcing #5

Nu hvor vi har fået sluttet cirklen og har fået beskrevet hvordan vi kan få Cirqus op at køre med view-generering, så vil jeg lige dvæle lidt ved initialiseringen – jeg viste det følgende kodeeksempel: // ved opstart: var eventStore = new MsSqlEventStore<TimeToBeCrushedView>(“mssql”, “Events”, automaticallyCreateSchema: true); var repository = new DefaultAggregateRootRepository(eventStore); var view = new MsSqlViewManager(“mssql”, “TimeToBeCrushed”, automaticallyCreateSchema: true); var dispatcher = new ViewManagerEventDispatcher(aggregateRootRepository,…

Introduktion til CQRS og event sourcing #4

Nu hvor vi de foregående tre indlæg har arbejdet os hen til at kunne processere commands, så mangler vi bare det sidste trin i raketten for at kunne slutte cirklen: Views. Views dannes ud fra events efterhånden som de sker, og med Cirqus foregår dette ved at man installerer en passende IEventDispatcher implementation. En IEventDispatcher er en dims, der får mulighed for at gøre…

Introduktion til CQRS og event sourcing #3

I det forrige indlæg så hvordan vi kunne kode en Beetroot, som vi kunne sende en SqueezeCommand til. Når command’en blev processeret ville den kalde Squeeze(howMuch)-funktionen på rødbeden, som så ville emitte en BeetrootSquashed event hvis den stadig havde list saft i sig, og ellers ville den emitte en BeetrootCompletelyCrushed – så langt så godt! Men vi mangler stadigvæk at få bragt lidt liv…

Introduktion til CQRS og event sourcing #2

I det forrige indlæg beskrev jeg i grove træk principperne i event sourcing og CQRS, og så lovede jeg at give en introduktion til d60s Cirqus-framework… samtidig med introduktionen til Cirqus vil jeg også sørge for at vi har en fælles ordbog, sådan at vi er nogenlunde enige om hvad vi snakker om resten af tiden. Here goes: Domain-driven design Greg Youngs ide om…

Introduktion til CQRS og event sourcing #1

Da jeg har brugt den seneste tid dybt begravet i CQRS og event sourcing, og da der ikke p.t. på QED.dk findes artikler om emnet – og da vi hos d60 for nylig har udgivet vores egenudviklede CQRS + event sourcing framework, Cirqus, som FOSS på GitHub – så synes jeg lige det er på sin plads at introducere emnet. Dette indlæg vil give…