INNOVATIECODECONTENT & COLLABORATIONEVENTSOURCINGCQRSSOFTWARE ONTWIKKELING
19/05/2023 • Thomas Verhoeven

De kracht van EventSourcing en CQRS: een beginnershandleiding

Op de hoogte blijven van de nieuwste trends en best practices is cruciaal in de snel evoluerende wereld van softwareontwikkeling. Innovatieve benaderingen zoals EventSourcing en CQRS maken het mogelijk om flexibele, schaalbare en veilige systemen te bouwen. Op Domain-Driven Design (DDD) Europe 2022 hield Paolo Banfi een verhelderende lezing over deze twee technieken.

Afbeelding DDD met foto van Paolo Banfi

Wat is EventSourcing?

EventSourcing is een innovatieve benadering van dataopslag die prioriteit geeft aan de historische context van een object. In plaats van alleen de huidige status van een object vast te leggen, slaat EventSourcing alle gebeurtenissen (‘events’) op die tot die status hebben geleid.

Het creëren van een goed ontworpen event model is van cruciaal belang bij het implementeren van EventSourcing. Het event model definieert de events die worden opgeslagen en hoe ze worden gestructureerd. Zorgvuldige planning van het event model is cruciaal omdat het effect heeft op de gemakkelijkheid van gegevensanalyse. Het aanpassen van het event model na implementatie kan lastig zijn, dus het is belangrijk om het vanaf het begin goed te doen.

Wat is CQRS

CQRS (Command Query Responsibility Segregation) is een techniek die lees- en schrijfbewerkingen in een systeem scheidt om de efficiëntie en begrijpelijkheid te verbeteren. In een traditionele architectuur communiceert een applicatie doorgaans met een database via een enkele interface. CQRS scheidt echter de lees- en schrijfbewerkingen, die elk door verschillende componenten worden afgehandeld.

EventSourcing en CQRS combineren

Door EventSourcing en CQRS te combineren wordt het bijhouden van wijzigingen en het controleren van gegevens een stuk makkelijker. Door alle gebeurtenissen bij te houden die tot een bepaalde toestand hebben geleid, is het gemakkelijker om veranderingen in de loop van de tijd bij te houden. Dat is handig voor toepassingen die audits of regelgeving vereisen.

Bovendien biedt het op deze manier scheiden van lees- en schrijfbewerkingen verschillende voordelen:

  • Het optimaliseert het systeem door contention te verminderen en de schaalbaarheid te verbeteren.
  • Het vereenvoudigt het systeem door de zorgen van beide partijen te isoleren.
  • Het verbetert de beveiliging van gevoelige gegevens door de toegang tot de schrijfzijde van het systeem te beperken.

Een ander belangrijk voordeel van CQRS is dat je niet de volledige stroom van events hoeft te doorlopen om de huidige status te bepalen. Door lees- en schrijfbewerkingen te scheiden, kan de leeszijde van het systeem speciale modellen onderhouden die zijn geoptimaliseerd voor het opvragen en ophalen van specifieke dataweergaven. Daardoor hoef je niet de hele stroom van events te doorlopen wanneer het systeem wordt gevraagd naar de laatste status. In plaats daarvan kunnen de geoptimaliseerde leesmodellen efficiënt de benodigde data leveren, wat leidt tot verbeterde prestaties en minder latency.

Wanneer EventSourcind en CQRS gebruiken

Het is belangrijk om op te merken dat EventSourcing en CQRS mogelijk niet geschikt zijn voor elk project. Het implementeren van EventSourcing en CQRS kan vooraf meer werk vragen in vergelijking met traditionele benaderingen. Ontwikkelaars moeten tijd investeren in het begrijpen en effectief implementeren van deze benaderingen. Voor systemen die een hoge schaalbaarheid, flexibiliteit of beveiliging vereisen, kunnen EventSourcing en CQRS echter een uitstekende oplossing bieden.

De beslissing of je CQRS of EventSourcing voor je toepassing wil gebruiken, hangt af van verschillende factoren, zoals de complexiteit van je domeinmodel, de schaalbaarheidsvereisten en de behoefte aan een uitgebreide audittrail van system events.

Ontwikkelaars moeten de specifieke behoeften van hun project evalueren voordat ze beslissen of ze deze methodes willen gebruiken.

  • CQRS is geschikt voor toepassingen met complexe domeinmodellen die verschillende dataweergaven vereisen voor verschillende gebruiksscenario's. Door de lees- en schrijfbewerkingen te scheiden in afzonderlijke modellen, kan je de leesbewerkingen optimaliseren voor prestaties en schaalbaarheid, terwijl je toch één single source of truth voor de gegevens behoudt.
  • Event Sourcing is ideaal wanneer je een volledig en nauwkeurig overzicht moet bijhouden van alle wijzigingen aan je systeem in de loop van de tijd. Door elke gebeurtenis vast te leggen terwijl deze plaatsvindt en deze op te slaan in een append-only logboek, kan je een onveranderlijk audittrail creëren voor debugging, compliance en andere doeleinden.

Conclusie

De combinatie van EventSourcing en CQRS kan ontwikkelaars aanzienlijke voordelen opleveren, zoals meer flexibiliteit, schaalbaarheid en beveiliging. Ze bieden een frisse benadering van softwareontwikkeling die ontwikkelaars kan helpen applicaties te creëren die beter aansluiten bij de behoeften van moderne organisaties.

Als je meer wil weten over EventSourcing en CQRS, zijn er tal van uitstekende bronnen online beschikbaar. Conferenties en lezingen zoals DDD Europe zijn ook uitstekende gelegenheden om op de hoogte te blijven van de nieuwste trends en best practices in software ontwikkeling. Zorg ervoor dat je deze opportuniteiten niet mist!

De volgende editie van Domain-Driven Design Europe vindt plaats in Amsterdam van 5 t/m 9 juni 2023.

Wist je dat ACA Group een van de trotse sponsors is van DDD Europe?