Event sourcing
Event sourcing is een architectuurpatroon dat stelt dat events, de gebeurtenissen, worden vastgelegd en gebruikt als de source, de bron, van data in een systeem. In Domain-Driven Design ligt er veel nadruk op het goed onderkennen en ontwerpen van business domeinen. Met CQRS wordt die nadruk versterkt in een onderscheid tussen het wijzigen (command-kant) en het bevragen (view- / Query-kant) van elk domein. Events drukken vervolgens de gebeurtenissen, de wijzigingen, de veranderingen uit, die door commando's worden geïnitieerd, volgens het business domein. Daarmee bieden deze events uitgebreide mogelijkheden voor de expliciete vertaling en synchronisatie naar alle en gevarieerde views of projecties. Event sourcing hangt daarom nauw samen met DDD en CQRS en versterken deze zaken elkaar.

Door het toepassen van event sourcing i.c.m. CQRS ontstaat er een sterke verbinding tussen opdrachten en handelingen ‘aan de voorkant’ van een domein en de views ‘aan de achterkant’. Het ondersteunt en onderbouwt het besef dat ‘de achterkant’ niet één view is, maar dat er meerdere en verschillende projecties zijn op dezelfde set van veranderingen van een domein. Ten opzichte van de huidige staat van systemen is dit een paradigma verschuiving van ‘één model naar commands, events en queries’.

Door deze verschuiving naar commands, events en queries ontstaat er vele mogelijkheden:
-
De lijst van veranderingen, de events, vormen per definitie de ‘audit trail’ van het domein en het systeem. Deze onderbouwt heel precies waarom iets is gebeurd, wat de bedoeling daarvan was, wanneer dat is gebeurd en door wat of wie.
-
Historische gegevens kunnen uitstekend worden verklaard en herleid worden op basis van de lijst van events, om te begrijpen wat er gebeurd is en waarom. Het is ook mogelijk om projecties / views opnieuw op te bouwen, maar hier zitten ook nadelen en risico's aan vast (zie elders TODO link toevoegen).
-
Consistentie in CQRS is uitdagend. Het gebruik van cloud infrastructuur versterkt de complexiteit hierin nog meer. Door de expliciete lijst van events in volgorde te hanteren, zoals gebruikelijk in event sourcing, wordt het consistent houden en ook bijhouden van de actualiteit per view eenvoudig(er) en transparant(er). Dit biedt enorme voordelen en mogelijkheden, ook om te variëren per view en situatie.
-
Verbetering afstemming business domein doordat de business verplicht wordt om expliciet uit te drukken wat de veranderingen zijn en wat daarmee moet gebeuren. Dat zijn vervolgens directe en concrete instructies voor de development teams. Business events en technische synchronisatie worden gelijk. Problematiek rondom synchronisatie, actualiteit en begrip worden gelijk tussen techniek en business domein. Daarom wordt event sourcing ook aangeraden vanuit Domain-Driven Design
Betekenis voor de handreiking
De waarden die Domain-driven design benadrukt en die door de patronen CQRS en event sourcing in structuren concreet gemaakt worden, zijn een sterke inspiratie geweest voor de handreiking. Conceptueel volgen we de verschillende verantwoordelijkheden en scheiding van het bijhouden en het leveren in het gevolgenjournaal en projecties. Tegelijk is 'alleen event sourcing' toepassen onvoldoende. Lees daarvoor het instapverhaal van event sourcing naar betrouwbaar register.
Referenties
Hoewel event sourcing een gangbaar architectuurpatroon is, is er geen autoritaire bron die dit beschrijft. Deze bronnen belichten verschillende aspecten en hangen sterk samen met de referenties over CQRS en Domain-Driven Design:
- Event Sourcing – DDD Practitioners – beknopte definitie in de DDD-begrippenlijst.
- Greg Young – pionier op het gebied van CQRS en event sourcing; zoek "Greg Young event sourcing" op YouTube voor video's en presentaties.
- Event sourcing – Microsoft Docs – uitleg van het patroon, de voordelen en de implementatiedetails.
- EventStore – database specifiek ontworpen voor event sourcing, met technische blogs en handleidingen.
- Dilger, M. Understanding Eventsourcing – zie ook 'the red book' van Vaughn Vernon over Domain-driven design.
- CQRS and event sourcing – AxonIQ – uitleg vanuit het Axon Framework.
- Event Sourcing – Martin Fowler – klassieke uitleg, inmiddels sterk verouderd.
- Marc van Andel – Event Sourcing Playlist (NL) en (EN) op YouTube.