Event sourcing is een architectuurpatroon dat stelt dat events, de wijzigingen, 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 (query-kant) van elk domein. Events drukken vervolgens de wijzigingen, de veranderingen, die door commands worden geïnitieerd, uit 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 icm 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 kan worden gereproduceerd op basis van de lijst van events, om te begrijpen wat er gebeurd is, waarom én om het systeem naar een eerdere toestand terug te zetten.
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.
Referenties
Hoewel [[event-sourcing]] een gangbaar architectuurpatroon is, is er geen autoritaire bron die dit beschrijft. Er zijn vooral verschillende referenties die verschillende aspecten belichten en beschrijven. Deze hangen sterk samen met referenties over [[cqrs]] en [[domain-driven-design]]:
AxonIQ Docs: AxonIQ is het bedrijf achter het Axon Framework; een Java framework om Event Sourcing systemen te bouwen. Lees bijvoorbeeld:
Greg Young: Greg Young is een pionier op het gebied van CQRS en Event Sourcing en heeft veel kennis gedeeld in artikelen en video’s. Zijn inzichten gaan vaak in op de praktische implementatie en uitdagingen.
- Zoek op “Greg Young Event Sourcing” voor video’s en presentaties op YouTube of andere platforms.
Voor meer begrip en inspiratie over Event Sourcing heb ik geprobeerd een aantal video’s op te nemen. Deze zijn gepubliceerd door mijn alter ego ‘Marc explains’ 😁
Microsoft Docs (Event Sourcing): Microsoft heeft uitgebreide documentatie over Event Sourcing en de relatie met CQRS. Ze bieden een overzicht van de voordelen en nadelen, en hoe je het patroon kunt implementeren:
EventStore: EventStore is een populaire database die speciaal is ontworpen voor Event Sourcing. Op hun website kun je technische blogs en handleidingen vinden over hoe je Event Sourcing kunt toepassen:
Martin Fowler’s Blog: Martin Fowler’s is een autoriteit wat betreft patronen en concepten. We kunnen daarom deze verwijzing niet weglaten:
Event Sourcing - Martin Fowler
warning deze info van Martin Fowler is sterk verouderd en wordt door ervaringsdeskundigen als onjuist of niet meer actueel gezien!
Boeken:
- “Implementing Domain-Driven Design” door Vaughn Vernon bevat hoofdstukken over Event Sourcing in combinatie met DDD.
- “Domain-Driven Design and Event Sourcing”* van Adam Dymitruk bespreekt Event Sourcing uitgebreid in de context van DDD en CQRS.
Community Resources & GitHub: Op GitHub zijn verschillende voorbeeldprojecten te vinden die Event Sourcing implementeren in combinatie met CQRS en DDD, vaak in talen als Java, .NET, en Node.js.
Deze bronnen kunnen je een diepgaand begrip geven en je helpen met praktijkvoorbeelden en best practices om CQRS in jouw projecten toe te passen.