Spekkoek
…je bouwt functionaliteit op hoog abstractieniveau dat draait op een lager niveau vet platform.
✣ ✣ ✣
Je doet je best om een systeem snel en economisch verantwoord te bouwen, maar het bouwen van functionaliteit van hoog abstractieniveau op een laag-niveau platform vereist veel werk om de kloof tussen die twee te overbruggen. Er zijn ook kwesties zoals persistentie en communicatie tussen processen die over vele functionele gebieden op een uniforme manier moeten worden opgelost.
Krachten:
- De kloof tussen hoog en laag abstractieniveau overbruggen kost heel veel werk.
- Goede object-georiënteerde praktijken suggereren het maken van kleinere modules met goed gedefinieerde verantwoordelijkheden.
- Van slechts een enkele ontwikkelaar kan je verwachten dat hij of zij meester is op alle details van het ontwerpen van hoog domeingericht niveau tot laag operationeel niveau.
- Je hebt een tekort aan (top)ontwikkelaars.
- Het bouwen van redundante oplossingen voor systemische eisen is noch snel, noch kosteffectief.
- Als je poogt om oplossingen te hergebruiken of herbruikbaar te maken neigen oplossingen op laag niveau generieker herbruikbaar te zijn en daarom vaak breder (commerciëler) beschikbaar.
- Elke laag kent zijn eigen ritme, technologie, zienswijze van ontwikkeling, beginselen en ontwikkelsnelheid.
Daarom:
Behandel het doelsysteem intern als een verzameling gestapelde subsystemen, elk bouwend op de diensten van onderliggende lagen en diensten leverend aan bovenliggende lagen.
✣ ✣ ✣
✣ ✣ ✣
Dit arrangement van subsystemen heet lagen. Elk subsysteem of laag is op een bepaald abstractieniveau gedefinieerd. Abstractie impliceert het verbergen van detail dat op haar beurt impliceert dat een verzameling relatief talrijker of complexere operaties op de ene laag op een eenvoudiger manier blootgesteld worden aan bovenliggende lagen.
De overkoepelende structuur is een gerichte graaf die volgens afhankelijkheden in één richting idealiter a-cyclisch is: minimaliseer of vermijd tweewegs of cyclische afhankelijkheden tussen delen.
In hardware- en software-systemen zoals besturingssystemen is de onderste laag de hardware en de device drivers met daarboven het besturingssysteem (UNIX, Mac OS X, Linux, Windows) en daarboven op weer de Applicatie Server op basis waarvan de bedrijfslogica gebouwd wordt.
Nog hogere abstractielagen richten zich vervolgens op (generieke) klant- en bedrijfsprocessen die met speciale instrumenten samengesteld worden en voortdurend evolueren.
Orthogonaal op al deze lagen werkt beheer als een soort ‘tuinier’ om de zaak als geheel gezond en fris te houden en wildgroei te voorkomen.
Oorspronkelijk heet deze parel thin heavy layers of, vrij naar het Nederlands gehaald, dunne zware lagen.