schoenen prijzen Duitsland in Max Air 2017 outlet lage voor tegen Nike 1AfEvqx » blog » De mythe van de gelaagde architectuur Nike met zwart dames shirt ronde zwart wit hals O1Oraxqz

Balance loopschoenen Demping heren voor New grijs M560v7

Datum: 21-10-2015
Auteur:
Pieter van der Spek, Software Architect

Het opdelen van een applicatie in verschillende lagen wordt gezien als de hedendaagse standaard en een best practice voor de architectuur van veel software applicaties. Eén van de argumenten is dat hierdoor (automatisch) een “decoupled” applicatie wordt verkregen.

zwart Zwart 300 Trainers Women's Balance New wq8aXxIq

Er zijn ondertussen ook vele standaarden ontwikkeld waarbij MVC en MVVM wellicht de meest bekende zijn. Ook wordt vaak een ORM toegepast om de scheiding tussen database en code te vereenvoudigen. Conceptueel zit dit model er vaak uit als in het plaatje hier onder.

Dat de gelaagde architectuur zo’n succes kon worden is zeker niet zonder reden. Ten eerste is het makkelijker om, door het maken van duidelijke afspraken over de interfaces tussen de verschillende lagen, de implementatie van de verschillende lagen uit te laten voeren door verschillende teams. Verder zou het eenvoudig moeten zijn om een specifieke laag te vervangen door een andere implementatie. In de klassieke 3-lagen architectuur zou je op die manier relatief eenvoudig een andere presentatie laag moeten kunnen introduceren of kunnen wisselen van database.

zilver 300 Trainers New Women's nerts Zwart Balance f0q8Ac7

De praktijk is echter weerbarstig. Terwijl wisselen van presentatie laag vaak nog wel te doen is, is wisselen van database vaak lastig of zelfs onmogelijk. Specifieke eigenschappen van de database lekken al snel door naar bovenliggende lagen omwille van niet-functionele eisen zoals performance. Daarnaast sluit het hebben van één model voor zowel lezen van data als schrijven van data vaak niet goed aan bij wat nodig is. De eisen die worden gesteld aan beide acties zijn vaak compleet verschillend.

Waar je in een database graag de data genormaliseerd wil opslaan, wil je dit bij het presenteren van de data juist vaak helemaal niet. Niemand wil op zijn scherm met een lijst met auto’s een al dan niet numeriek getal zien dat het merk aanduidt. Natuurlijk kun je dit in een relationele database eenvoudig oplossen met een JOIN, maar naar gelang de weergave op het scherm complexer wordt, neemt het aantal JOINs gestaag toe en de performance van de applicatie gestaag af.

Ook voor het schrijven van data is er veel af te dingen op het hebben van een gezamenlijk model. Waar het lezen van data vaak vraagt om een hoge granulariteit – immers, de gebruiker wil helemaal niet weten dat gegevens van auto en merk in afzonderlijke tabellen staan – is voor schrijven natuurlijk wel die fijne granulariteit gewenst. Bovendien wil je bij het schrijven van veel data al snel gebruik maken van bulk data tooling (denk aan SQLBulkCopy). Iets wat menig ORM niet zomaar ondersteund en het nut van het gebruiken van een ORM zelfs verminderd, immers, het hele idee is om te abstraheren van de onderliggende database technologie, terwijl dat helemaal niet kan als je het onderste uit de kan wil halen wat betreft performance.

CQRS

De voor de hand liggende stap is dan ook om het lezen en schrijven van elkaar te scheiden. Dit is waar CQRS, ofwel Command Query Responsibility Separation, om de hoek komt kijken. CQRS is het principe van gescheiden modellen, maar dan verder doorgetrokken. In dit geval zijn niet alleen de modellen gescheiden van elkaar, maar ook de onderliggende databases, zoals is te zien in de onderstaande, conceptuele weergave van CQRS.

Vaak wordt CQRS in één adem genoemd met Event Sourcing. Alhoewel Event Sourcing (ES) geen verplichting is, wil ik dit principe hier wel even kort toelichten. Event Sourcing zorgt ervoor dat alle wijzigingen in de applicatie worden opgeslagen als een serie van events. Door het uitvoeren van queries op deze events kun je de huidige status van een object, maar ook heel eenvoudig de status op een specifiek moment in het verleden terughalen. Met andere woorden, je hebt zo de data en een audit trail in één. Als je meer wilt weten over Event Sourcing, is er op Internet veel te vinden. Onder andere Martin Fowler heeft een uitgebreide blogpost geschreven over dit onderwerp.Lage sneakers Navy Women's wit 373 New Balance tTfwC

In CQRS worden commando’s gescheiden van queries. Onder commando’s worden acties verstaan die de status van het systeem veranderen. Commando’s geven geen resultaten terug, maar kunnen alleen slagen of falen (met opgaaf van reden natuurlijk). Commando’s moeten een weergave zijn van de taken die een gebruiker uit kan voeren en dus een duidelijk en eenduidig doel hebben. Queries, aan de andere kant, zijn bedoeld om data op te vragen.

In zijn meest extreme (of pure) vorm, namelijk CQRS gecombineerd met ES, vinden beide acties plaats op verschillende database. Bovendien geldt meestal het principe van “eventual consistency”. Dit houdt in dat middels een synchronisatie-mechanisme de database die gebruikt wordt voor het lezen van data uiteindelijk wordt bijgewerkt met de laatste wijzigingen in de database die gebruikt wordt voor het schrijven van data. Dit hoeft echter niet onmiddellijk te gebeuren, maar kan ook met enige vertraging gedaan worden.

Over het toepassingsgebied van CQRS/ES lopen de meningen ver uiteen. Udi Dahan, één van de mensen die aan de wieg van dit paradigma stond, is van mening dat het bijna altijd de verkeerde keuze is. Ook Martin Fowler ziet alleen het nu van CQRS/ES in voor zeer complexe domeinen en voor high performance applicaties.

Maar tussen het klassieke, gelaagde model en CQRS/ES ligt een groot, grijs gebied van mengvormen. Voor 99 van de 100 applicaties zal het scheiden van de modellen voor lezen en voor schrijven meer dan voldoende zijn. Overstappen naar technieken als ES en gescheiden databases brengt in die gevallen meer lasten dan lusten. Event Sourcing is vaak complex en de geboden voordelen, zoals een audit trail, volkomen overbodig voor het doel van de applicatie. In die gevallen is een enkele database, al dan niet voorzien van views ten behoeve van lezen van data in gedenormaliseerde vorm, een veel betere keuze. Conceptueel ziet deze variant er uit als in het onderstaande plaatje.

Op deze manier kun je voor beide activiteiten het meest efficiënte model opstellen zonder compromissen te hoeven maken omwille van een van beide. En het ORM hoeft hiermee niet te verdwijnen, maar denk niet dat je het ORM kunt inzetten om te abstraheren van de specifieke database. Wel kun je andere eigenschappen van een ORM gebruiken, zoals strongly-typed queries in plaats van handgeschreven SQL strings, om het ontwikkelproces te ondersteunen. Alhoewel het scheiden van de activiteiten op deze manier nog dicht tegen het gelaagde model aan ligt, wijkt het op essentiële punten af van het gedachtegoed achter dat model. Immers, op deze manier lekken de eisen van lezen en schrijven willens en wetens door de hele applicatie heen. Zo lang je je hier van bewust bent, hoeft dit echter geen probleem te zijn.

Overigens zou je ook het model voor het lezen van data achterwege kunnen laten, in het geval dat het gebruik van een ORM te veel overhead met zich meebrengt. Ook deze variant is te vangen in een plaatje zoals te zien hieronder.

top sneakers Suede Women's Blauw New Balance Low 373 turquoise fXZABUqw

Het bovenstaande klinkt natuurlijk geweldig, maar er kleven ook nadelen, of in ieder geval aandachtspunten, aan het toepassen van dit model. Meer nog dan in het klassieke, gelaagde model, moet bij het ontwerp rekening worden gehouden met multi-threaded toepassingen. Waar deze in het klassieke model eenvoudiger zijn te ondervangen, omdat gebruik wordt gemaakt van hetzelfde model om te lezen en te schrijven, is coördinatie tussen deze activiteiten bij gescheiden modellen wat lastiger.

Al met al zijn zeker de light varianten van CQRS niet lastiger toe te passen dan een klassiek, gelaagd model. Ik heb in bovenstaande tekst willen laten zien dat strak vasthouden aan het bekende, klassieke model misschien niet altijd even handig is. Voor recht-toe-recht-aan applicaties met een min of meer directe relatie tussen de data in de database en wat er op het scherm wordt getoond, kan dit zonder meer de juiste keuze zijn. Voor applicaties waar dezelfde data op vele verschillende manieren wordt gecombineerd en verwerkt, loop je met dat model al snel tegen inherente beperkingen aan die alleen zijn weg te moffelen met complexe code. Complexer dan nodig als je niet zou kiezen voor het compromis, maar gewoon het idee van gescheiden modellen zou omarmen.

Meer weten?

Onderstaand lijstje biedt een greep uit de grote hoeveelheid websites met informatie over de onderwerpen die hierboven de revue zijn gepasseerd:

marine 373 wit Balance New Women's Blauw Trainers qzxSnfnwZ

Heeft u vragen of wilt u meer informatie naar aanleiding van deze blog?
Neem dan contact met ons op via [email protected] of door te bellen naar +31 88 988 96 00.

Ns Trainers zilver Balance Blauw Women's New 373 marine 8S0RqxU