Projecties
Projecties
Projecties Luisteren naar events die leiden tot een state. Er zijn twee soorten projecties (zie ook architectuurpatronen), command- en queryprojecties. Er zijn echter een paar belangrijke verschillen tussen deze twee:
- Commandprojecties zijn geoptimaliseerd voor command handling, queryprojecties zijn geoptimaliseerd voor query handling.
- queryprojecties zijn eventually consistent (asynchroon), terwijl command handing gegarandeerd plaatsvindt op de consistent (latest) state.
Danzij dit patroon kunnen queries geheel onafhankelijk van de command handling en asynchroon afgehandeld worden vanuit deze voor queries geoptimaliseerde repositories.
Command handling
In de BrkBeoordelingCommandHandler worden commando's afgehandeld die te maken hebben met de beoordeling van de impact van een perceelsplitsing op een WOZ object. Het command BeoordeelPerceelSplitsing wordt gevalideerd tegen een projectie waarin bijgehouden wordt of een beoordeling aan de orde is. Als dit het geval is dan leidt dit tot een nieuw event: WozObjectBeoordeeldNavPerceelSplitsing.
Query handling
In de WozObjectMetOnderzoekenQueryHandler worden queries afgehandeld betreffende WOZ objecten, met de mogelijkheid tot tijdreizen. In de MijnWOZObjectRepository worden de WOZ objecten opgeslagen per Geldigheidstijdstip en gevolgtijdstip. Het geldigheidstijdstip betreft het moment waarop het event formeel ingaat, terwijl het gevolgtijdstip het moment van verwerking representeert. Deze twee tijdlijnen lopen normaal gesproken parallel naast elkaar: 'normale' events, zoals BelangOvergegaanNavOverdracht leiden tot het toevoegen van 1 nieuw item op de tijlijn, voor zowel formele als verwerkingstijdstip. Echter, in het geval van correcties, zoals bij het BelangGecorrigeerdNavFouteRegistratieBRK wordt er in de projectie met terugwerkende kracht voor elke snapshot vanaf wanneer de correctie van kracht dient te worden een nieuwe snapshot (met later eventtijdstip) toegevoegd op dezelfde Ingangsdatum. Op deze manier is deze repository te bevragen op zowel de formele als de verwerkingstijdlijn.