Architectural Styles vs. Architectural Patterns vs. Design Patterns

X

Privacy & Cookies

Deze site maakt gebruik van cookies. Door verder te gaan, gaat u akkoord met het gebruik ervan. Lees meer, inclusief hoe u cookies kunt beheren.

Got it!

Advertenties

Deze post maakt deel uit van The Software Architecture Chronicles, een serie posts over softwarearchitectuur. Daarin schrijf ik over wat ik heb geleerd over Software Architectuur, hoe ik erover denk, en hoe ik die kennis gebruik. De inhoud van deze post wordt misschien duidelijker als je de vorige posten in deze serie leest.

In de vorige post schreef ik over hoe programmeertalen zijn geëvolueerd en wat dat ons vertelt: dat ze altijd zijn geëvolueerd in de richting van meer modulariteit en encapsulatie.

In de volgende posts zal ik schrijven over de evolutie van Architectural Styles en Architectural Patterns, dus vandaag zal ik schrijven over wat een Architectural Style en wat een Architectural Pattern is.

Zoals zoveel terminologie in Software Ontwikkeling, zijn deze termen niet duidelijk en geven verschillende mensen er een verschillende betekenis aan. MSDN zegt dat Architectural Styles en Architectural Patterns dezelfde dingen zijn, maar persoonlijk geef ik er de voorkeur aan om te denken in de lijn van wat wordt uitgelegd door George Fairbanks en Michael Keeling, wat wordt gezegd in deze stack overflow antwoorden en hoe Wikipedia de twee scheidt: het belangrijkste verschil is de scope.

Het is ook belangrijk om het idee te versterken dat Architectural Styles, Architectural Patterns en Design Patterns elkaar niet uitsluiten, ze zijn complementair en ze kunnen ons allemaal iets leren, hoewel ze, zoals gebruikelijk, alleen moeten worden gebruikt wanneer dat nodig is.

Architectural Styles

Architectural styles vertellen ons, in zeer brede streken, hoe we onze code moeten organiseren. Het is het hoogste niveau van granulariteit en het specificeert lagen, high-level modules van de applicatie en hoe die modules en lagen met elkaar interageren, de relaties tussen hen. Voorbeelden van architectonische stijlen:

  • Component-based
  • Monolithic application
  • Layered
  • Pipes and filters
  • Event-driven
  • Publish-subscribe
  • Plug-ins
  • Client-server
  • Service-oriented

Een architectuurstijl kan op verschillende manieren worden geïmplementeerd, met een specifieke technische omgeving, specifiek beleid, raamwerken of praktijken.

Architectural Patterns

Een pattern is een steeds terugkerende oplossing voor een steeds terugkerend probleem. In het geval van Architectural Patterns, lossen ze de problemen op die samenhangen met de Architectural Style. Bijvoorbeeld, “welke klassen zullen we hebben en hoe zullen ze interageren, om een systeem te implementeren met een specifieke set van lagen”, of “welke high-level modules zullen we hebben in onze Service-Oriented Architectuur en hoe zullen ze communiceren”, of “hoeveel tiers zal onze Client-server Architectuur hebben”.

Architectural Patterns hebben een grote invloed op de code base, meestal hebben ze invloed op de hele applicatie, hetzij horizontaal (d.w.z. hoe de code binnen een laag wordt gestructureerd) of verticaal (d.w.z. hoe een verzoek wordt verwerkt van de buitenste lagen naar de binnenste lagen en terug). Voorbeelden van Architectural Patterns:

  • Three-tier
  • Microkernel
  • Model-View-Controller
  • Model-ViewModel

Design Patterns

Design Patterns verschillen van Architectural Patterns in hun scope, ze zijn meer gelokaliseerd, ze hebben minder invloed op de code base, ze hebben invloed op een specifiek deel van de code base, bijvoorbeeld:

  • Hoe een object te instantiëren als we alleen weten welk type moet worden geïnstantieerd op runtime (misschien een Factory Class?);
  • Hoe laat je een object zich anders gedragen naar gelang zijn toestand (misschien een state machine, of een Strategy Pattern?).

Conclusie

Zoals ik in het begin van deze post al zei, gaat het om de scope:

  • Een Architectural Style is het applicatieontwerp op het hoogste abstractieniveau;
  • Een Architectural Pattern is een manier om een Architectural Style te implementeren;
  • Een Design Pattern is een manier om een gelokaliseerd probleem op te lossen.

Daarnaast kan een pattern zowel als Architectural Pattern of als Design Pattern worden gebruikt, wederom afhankelijk van de scope waarin we het gebruiken, in een specifiek project.

Bronnen

2004 – Microsoft – Understanding Service-Oriented Architecture

2009 – Microsoft – Microsoft Application Architecture Guide

2010 – Stack Overflow – Wat is het verschil tussen Arch. Patterns en Arch. Styles?

2014 – George Fairbanks – Architecture Patterns vs. Architectural Styles

2017 – Wikipedia – Lijst van software architectuurstijlen en patronen

Advertenties

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *