Bitemporele projecties bijwerken
Bitemporaliteit is complex, en zoals in een eerder hoofdstuk uitgelegd is daar best wat voor nodig in projecties. Zeker in grotere projecten met veel verschillende typen gevolgen en veel data kan zowel het bijwerken van een bitemporele projectiestore als het bevragen van een dergelijke store erg moeilijk worden. Om de complexiteit van bitemporaliteit te tackelen ambiëren we in dit project aan de ene kant standaardisatie te introduceren bij het vertalen van gevolgen naar projecties, en aan de andere kant projectievormen voor te stellen die het query'en eenvoudig(er) maken.
In dit hoofdstuk bespreken we de linkerkant van bovenstaande plaat, het standaardiseren. Bij het opbouwen van een bitemporele store aan de hand van gevolgen zijn er een aantal standaardoperaties te herkennen. Eerder hebben we al gevolg-archetypen beschreven. Deze archetypen hebben elk een eigen standaardoperatie in het bijwerken van een projectie.
Het toevoegen van een nieuwe state aan de projectiestore kan op verschillende manieren, en is afhankelijk van de situatie:
- Bestaat de aggregate al of is deze nieuw in de store?
- Wordt er een nieuw geldigheidsmoment toegevoegd aan de store, of wordt een bestaand geldigheidsmoment bovenschreven?
- Wordt er bij de bovenschrijving foute informatie hersteld of niet?
Mutaties in detail
In de basis kent de projectiestore twee typen operaties:
Deze worden hieronder in detail uitgelegd.
create
De initiële projectie, of state:
Deze flow wordt gebruikt bij de create operatie.
append, amend & correct
Een nieuwe projectie op basis van een gevolg dat werkt op het voorgaande projectie:
Deze flow wordt gebruikt bij de append, amend, en correct operaties.
De append betreft een 'reguliere' mutatie: bij de append wordt een geheel nieuw geldigheidstijdstip toegevoegd aan de projectiestore.
Er zijn situaties waarbij informatie over het verleden beschikbaar komt en met terugwerkende kracht actief moet worden. In dat geval wordt een projectie toegevoegd op een geldigheidstijdstip dat al aanwezig was in de registratie. Deze operatie noemen we bovenschrijven, om het te onderscheiden van overschrijven.
Bovenschrijven kan op twee verschillende manieren, met als verschil het projectie dat als uitgangspunt genomen wordt. Bij correct is gebleken dat het bestaande projectie foutieve informatie bevat: een nieuwe projectie dient aangemaakt te worden op basis van de voorgaande projectie. De nieuwe projectie dient opnieuw aangemaakt te worden op dezelfde manier als de oude, maar met een verbetering uit het gevolg.
Bij amend was de reeds bestaande projectie op zich niet fout, maar wordt er (achteraf) informatie toegevoegd (of verwijderd). Bij deze operatie dient de reeds bestaande snaphot als uitgangspunt genomen te worden.
Overzicht
| Term | Betekenis |
|---|---|
| create | Eerste punt van een nieuwe entiteit — altijd linksonder in de grafiek |
| append | Nieuw tijdvak aan het einde van de geldigheidstijdlijn — altijd rechtsboven |
| amend | Bovenschrijft een projectie met als bron de oorspronkelijke snaphot |
| correct | Bovenschrijft een projectie met als bron het voorgaande snaphot |