Ga naar hoofdinhoud

Uitgifte van id's

Uitgifte van id's

Binnen praktisch elk domein zijn er entiteiten die een uniek identificatienummer nodig hebben. Een traditionele manier van het uitgeven van id's zijn database sequences. Binnen een event sourced context heb je echter (mogelijk) geen relationele database tot je beschikking en is een meer event sourced based wijze van uitgeven van id's wenselijk.

De meest eenvoudige manier van het uitgeven van unieke ID's is gebruik maken van UUID's. Deze zijn uniek en hebben geen relatie tot eerder uitgegeven id's, wat maakt dat ze ongelimiteerd en zonder context aangemaakt kunnen worden.

Helaas zijn we als ontwikkelaars vaak gebonden aan een context die id-uitgifte voorschrijft; zoals dat het geval is bij bijvoorbeeld BSN's, of binnen dit voorbeeld kadastraal object id's en WOZ objectnummers, waarbij er een eis ligt dat dit (deels) opeenvolgende nummers zijn.

Een voorbeeld van een dergelijke sequentiele implementatie is te vinden in de WozObjectnummerUitgifte event sourced entity. Door bij het aanmaken van een nieuw WOZ object deze entity in te lezen in de command handler, zoals gebeurt in de WozObjectCommandHandler bij het verwerken van het RegistreerNieuwWozObject command krijg je een nieuw uniek WOZ nummer toegewezen, gebaseerd op de state dat het laatste ID bijhoudt. Door gebruik te maken van snapshotting en/of caching ( implementaties voor Axon Framework 5 zijn er op het moment van schrijven nog niet) van je state zorg je voor een performante ID uitgifte.

De reden om deze implementatie te doen via een command handler en niet met bijvoorbeeld een projectie heeft te maken met de aard van command handlers: binnen het Axon Framework wordt gegarandeerd dat commando's op dezelfde state altijd sequentieel afgehandeld worden, en elk gegarandeerd op de laatste state. Dit in tegenstelling tot event handlers, die eventually consistent zijn, en derhalve achter kunnen lopen. Bij een achterlopende state loop je het risico dubbele ID's uit te geven, wat event handlers ongeschikt maakt (binnen het Axon Framework).