Ga naar hoofdinhoud

Generiek technisch domeinmodel

Generiek technisch domeinmodel

Zoals beschreven in het de architectuurpatronen over modellering van gevolgen en projecties, gebruiken we een conceptueel relationeel model waarop de events mutaties beschrijven en doorvoeren die leiden tot één of meerdere nieuwe snapshots in de tijdlijn. Dit uit zich concreet in de command en query projecties.

Projecties bestaan uit de kleinst mogelijke subset van (onderdelen van) entiteiten en events ten behoeve van (het vervullen van) een businessbehoefte van een command of query. Door op deze manier businessfunctionaliteiten te ontkoppelen vergroot dit de flexibiliteit, performance en beheersbaarheid van de applicatie.

Ook deze (kleine) projecties dienen te voldoen aan de conceptuele business rules die gelden voor het gehele model. Dit leidt, naar mate het aantal projecties en het aantal events toeneemt, echter tot een nieuwe uitdaging: hoe zorg je ervoor dat alle projecties correct opgebouwd worden? En hoe zorg je ervoor dat de afnemers van je events (die het model nog minder goed kennen) dat goed doen?

Een oplossing die wij voorstellen is gebaseerd op een concept bedacht voor de basisregistratie Kadaster door Gerlo Hesselink: een generiek technisch domeinmodel. In dit generieke model bestaan alle entiteiten met hun relaties ertussen én hoe events daarop afgehandeld dienen te worden. Daarin blijft open hoe die resultaten dan moeten worden opgeslagen of vertaald moeten worden naar een query. Dit biedt een framework voor alle projecties waarin events gegarandeerd op dezelfde wijze worden afgehandeld. Tegelijk biedt het mogelijkheden om per projectie te kiezen hoe de resultaten daarvan worden bewaard. Dit is bruikbaar voor zowel projecties in de command handling als in de query handling.

Specifiek in de event sourced entities en command handling projectors kan met behulp van het delegation pattern deze entiteit, of een subset daarvan, eenvoudig opgebouwd worden op basis van de relevante events. Op deze manier combineer je het beste van twee werelden: aan de ene kant blijft je projectie klein en to the point, terwijl je aan de andere kant een stuk zekerder bent van een correcte event handling.

todo: linkjes toevoegen naar relevante implementatie (andere pr's).