Coding Dojo: Event Sourcing met EventStore en EventFlow in .NET core

Op 12 februari verwelkomden we 10 mensen op ons kantoor in Amsterdam voor onze eerste dojo van het jaar. Het onderwerp: Event Sourcing. Na een lading pizza's gingen we hard aan de slag, want er was veel te doen!

Bij Infi zijn we dol op het gebruiken van nieuwe technieken. Voor een klant bij Infi Amsterdam gebruiken we voor de volledige applicatie Event Sourcing. Onze ervaring hiermee is zeer positief en middels deze dojo delen we ons enthousiasme en kennis graag met anderen.

We hebben ons hierbij gericht op mensen die de theorie achter Event Sourcing begrijpen, maar het nog nooit in de praktijk hebben toegepast. Op onze GitHub vind je de volledige opdracht die we in de dojo behandeld hebben, inclusief een uitgebreide instructie. Hopelijk helpt dat je op weg met je eerste Event Sourcing -avontuur! Is het nog een beetje onduidelijk voor je? Lees dan vooral verder.

Wat is Event Sourcing?

Event Sourcing is een techniek waarbij je de huidige staat van je applicatie niet opslaat. In plaats daarvan leg je alle gebeurtenissen (events) vast. Bij elkaar opgeteld vormen ze de huidige staat. Dit levert een aantal toffe voordelen op:

  • Je kunt altijd zien hoe je tot een bepaalde staat gekomen bent: je hebt direct een audit trail.
  • Dat betekent ook dat je iedere staat in het verleden terug kunt zien
  • Doordat je alle data hebt kun je complexe vragen beantwoorden die je tijdens het ontwikkelen nog niet verwacht had te moeten beantwoorden. Bijvoorbeeld, welke hotelgasten checken in het weekend in voor een kamer met uitzicht, bestellen vervolgens een diner via de roomservice, en later op de avond champagne maar raken de minibar niet aan tijdens hun bezoek.

Hoe ziet dit er in de praktijk uit? In dit voorbeeld gaan we uit van een reserveringssysteem voor een hotel. Bij een reservering horen een aantal zaken; de klant, de aankomst- en vertrekdatum en natuurlijk een kamer. De klant doet online een reservering, onze event stream ziet er dan zo uit:

event-sourcing-event-log-explained-1

Bij het inchecken wil de klant nog een extra nacht blijven en heeft hij liever een kamer met uitzicht op de zee. De volledige event stream van de reservering ziet er dan als volgt uit:

event-sourcing-event-log-explained-2

Zoals je ziet moeten we steeds alle events nalopen om tot de huidige staat van de reservering te komen. Daar staat tegenover dat we ook alle data bewaren en zo automatisch een geschiedenis van de gebeurtenissen hebben. Om de snelheid van alledaagse reads te bevorderen heb je vaak nog een read model naast je event stream. Deze bevat enkel de huidige staat en zit bijvoorbeeld in een SQL database.

Event Sourcing doet recht aan je domein

Misschien heb je wel eens gewerkt met event storming. Een manier waarbij je samen met de domeinexperts op zoek gaat naar de belangrijkste gebeurtenissen in je (toekomstige) applicatie. Events zijn een krachtig instrument om je domein mee te beschrijven, want dat komt heel dicht bij hoe we zaken in het echte leven ook beschrijven. Door ze vervolgens daadwerkelijk op die manier in je applicatie vast te leggen, ga je weer een stap verder in het zo correct mogelijk modelleren van je domein. Het hanteren van een ubiquitous language wordt daar ook eenvoudiger door. De manier waarop je flows in een applicatie met elkaar bespreekt wordt bijna op dezelfde manier beschreven in je code als je gebruik maakt van Event Sourcing. Een paar jaar terug gaven we al een dojo over event storming, zeker het bekijken waard!

Aan de slag!

Nu je de basis weet kun je zelf aan de slag. Je kunt de dojo vinden op onze GitHub. Laat je niet afschrikken door de omvang, we nemen je stap voor stap mee en het wordt gegarandeerd leuk! De dojo is geschreven in .NET Core, dus enige ervaring met C# is wel fijn.

De volgende dingen komen aan bod:

  • Introductie van EventStore. De database die we gebruiken om onze events in op te slaan. Er zijn ook andere mogelijkheden, het is zelfs mogelijk in een SQL db.
  • Introductie van EventFlow. EventFlow is een framework dat het managen van events wat makkelijker maakt. Zoals elk framework dwingt het je tot een bepaalde manier van werken. Het is echter geen vereiste voor Event Sourcing.
  • Basisopdrachten om een gevoel te krijgen hoe je met events werkt in een applicatie. Om het wat minder abstract te maken hebben we een hotelreserveringssysteem voor je klaargezet.
  • Bonusopdrachten die wat dieper op de stof ingaan en ook enkele nadelen aan het licht brengen. Wat doe je bijvoorbeeld als de inhoud van een event wijzigt? En hoe ga je om met GDPR/AVG wetgeving in combinatie met events die permanent en niet-verwijderbaar zijn?

Dus ga lekker naar https://github.com/infi-nl/coding-dojo-event-sourcing-with-eventstore-and-eventflow/ en ontdek de wondere wereld van Event Sourcing.

Leesvoer

Mocht je nog wat meer willen lezen over Event Sourcing dan kan ik je deze artikelen aanbevelen:

Als je er dan nog niet genoeg van hebt kun je ook eens deze Event Sourcing dojo bekijken die we in 2015 gaven. En houd verder natuurlijk onze meetup pagina in de gaten, we geven regelmatig andere dojo’s over uiteenlopende onderwerpen.

[Bryan is developer bij Infi]

Wil je op de hoogte blijven van updates over hippe tech, een kijkje achter de schermen, of upcoming events? Schrijf je in voor onze nieuwsbrief!

Infi maakt het allemaal waar:

browser-icon

Webapplicaties

Wij ontwikkelen webapplicaties op maat waarmee we jouw ideeën waarmaken. Maatwerkapplicaties gebouwd door ambitieuze nerds die niet schrikken van uitdagende logica, complexe databases, datamigraties of betaalomgevingen. Daarnaast verzorgen we ook de hosting, onderhoud en support. Wij willen jouw ideeën fixen. Wil je weten hoe?
Ontdek wat een webapplicatie voor je kan doen >

mobile-icon

Mobiele apps

We zijn nerds met liefde voor softwareontwikkeling, dus ook voor de ontwikkeling van mobiele applicaties (apps). Native apps voor iOS en Android, maar ook voor mobiel gebruik geoptimaliseerde webapplicaties. Wij weten wat erbij komt kijken en hebben de kennis voor web, iOS en Android allemaal in huis. Wil je weten wat het beste bij je past? 
Ontdek wat een mobiele app voor je kan doen >

Wil je met ons je droom waarmaken?

› Kom vooral eens langs voor een kop koffie!

Wil je iets waarmaken met Infi?

Wil jij een eigen webapplicatie of mobiele app waarmee jij het bij anderen maakt?

Waargemaakt door de nerds van Infi.
Nerds met liefde voor softwareontwikkeling en die kunnen communiceren. En heel belangrijk: wat we doen, doen we met veel lol!

Wij willen het fixen. Laat jij van je horen?