Byg bedre API'er med event-sourced domænemodeller
Bedre API’er gennem event-sourced domain modelling
De fleste udviklere kender det: du overtager en kodebase, som er vokset sig stor og uoverskuelig. Dokumentationen er enten forældet eller mangler helt. Forretningslogikken ligger spredt ud over flere filer, og ingen er helt sikre på, hvad systemet egentlig gør.
En anden tilgang kan gøre en forskel – og den begynder med event sourcing.
Hvorfor event sourcing er relevant i dag
Event sourcing vender den klassiske databasetilgang på hovedet. I stedet for kun at gemme den aktuelle tilstand gemmer du hele forløbet af ændringer, der har ført dertil. Hver handling bliver til en uforanderlig hændelse, der skrives i en log.
For teams, der arbejder med cloud-løsninger, API’er og microservices, giver det flere fordele:
- Du får en fuld audit-trail uden ekstra arbejde
- Du kan følge præcis, hvordan en tilstand er opstået
- Skrive- og læseoperationer kan adskilles og skaleres uafhængigt
- Du bliver tvunget til at forstå, hvad der faktisk sker i forretningen
Men det kan også virke lidt tungt at komme i gang med.
Domænemodellering – det oversete stykke
Før du kaster dig over at implementere event sourcing, bør du først have styr på selve domænet. Det handler om at kortlægge:
- Hvilke kommandoer der udløser ændringer
- Hvilke events som bliver udløst
- Hvordan forskellige delsystemer taler sammen
- Hvilke regler der aldrig må brydes
Denne klargøring er afgørende. Den adskiller løsninger, der vokser uden problemer, fra dem, der bliver svære at holde vedlige.
En fælles sprog for event-sourced arkitektur
Når du har klarlagt domænet, er det tid til at dokumentere det på en måde, som både mennesker og maskiner kan læse. Det betyder, at du ikke kun beskrive i prose eller kode,而是 til en struktur, der kan være:
- Aggregates – de enheder, der enforces rules
- Events – de faktiske hændelser, der er sket
- Commands – de anmodninger, der udløser ændringer
- Read Models – de modeller, der er optimeret for queries
- Process Managers – den logic, der koordinerer på tværs af aggregates
- Context Mappings – hvordan forsk