PHP 8.2: Wat is er nieuw?
De nieuwe versie van PHP staat voor de deur. Wat zijn de nieuwe implementaties waar je vanaf moet weten? Lees dit artikel om erachter te komen!
Ontdek de kracht van Hexagonal Architecture bij het verbeteren van de onderhoudbaarheid, testbaarheid en aanpasbaarheid van software.
In deze uitgebreide gids gaan we dieper in op de nuances van Zeshoekige architectuurWe verkennen de definitie, componenten en geschiedenis ervan. We zullen vergelijkingen trekken tussen Zeshoekige architectuur en andere populaire architectuurpatronen om de unieke sterke punten ervan te benadrukken. Ook zullen we de cruciale rol ervan onderzoeken in Domain-Driven Design (DDD) en microservices, die steeds belangrijker worden in de wereld van moderne softwareontwikkeling.
In het dynamische landschap van softwarearchitectuur, Zeshoekige architectuurook bekend als de havens en Adapters patroon, heeft zich ontpopt als een geduchte mededinger, die geleidelijk de normen van traditionele gelaagde architectuur.
Gedreven door de behoefte aan een architectonisch ontwerp dat gemakkelijk testen en betere onderhoudbaarheid garandeert, Zeshoekige architectuur werd bedacht. Haar missie: het leveren van robuuste softwareapplicaties Niet gehinderd door de ingewikkeldheden en wispelturigheden van de buitenwereld.
In de loop van dit artikel beginnen we aan een reis door de annalen van Zeshoekige architectuur - een architectuur die zich bevindt op het kruispunt van eenvoud en kracht. We zullen de geschiedenis, structuur en principes ervan ontrafelen en ze verder vergelijken met andere bouwstijlen. architecturale patronen. We zullen de mogelijkheden onderzoeken om de kwaliteit van softwaretoepassingen te verhogen en de toenemende technische schuldenlast die de software-industrie in zijn greep houdt, te verminderen.
De kern, Zeshoekige architectuurof de havens en Architectuur adaptersis een ontwerppatroon dat gebaseerd is op de scheiding van zorgen. Het verdeelt een applicatie in twee primaire secties: de binnenkant en de buitenkant.
De binnenkant, ook wel de applicatiekern genoemd, bevat de bedrijfslogica en domeinobjecten - de kern van waarde in je software. Dit innerlijke heiligdom blijft los van invloeden van buitenaf, waardoor de integriteit van de bedrijfslogica en het domeinmodel.
De buitenkant daarentegen is het rijk van externe systemen - van de gebruikersinterface tot databasetoegang - die communiceren met de kern van de applicatie. Deze interacties worden beheerd via een mechanisme van poorten en adapters, waardoor een schone scheiding tussen de applicatiekern en haar externe actoren.
Zeshoekige architectuur is een geesteskind van Alistair Cockburn, een visionair die dit concept voor het eerst formuleerde als antwoord op de beperkingen van de traditionele gelaagde architectuur. Het is ontworpen om een technologie-agnostische domeinlaag die de kern isoleert bedrijfslogica van externe invloeden, zoals de gebruikersinterface code en databasetoegang.
In traditionele gelaagde architectuurWijzigingen in de ene laag kunnen doorwerken in andere lagen, wat tot onbedoelde gevolgen kan leiden. Bovendien werd het testen bemoeilijkt door ingewikkelde afhankelijkheden tussen lagen.
Zeshoekige architectuur kwam naar voren als een oplossing en bood een model waarbij veranderingen in één deel van het systeem de andere delen niet zouden verstoren. In essentie probeerde het de bedrijfslogica agnostisch of het werd benaderd via een webinterface, een REST APIof zelfs een opdrachtregel.
Zeshoekige architectuur, genoemd naar de zeshoekige illusie in schematische voorstellingen, bestaat uit drie kerncomponenten: de domeinmodelpoorten (primair en secundair) en adapters (primair en secundair).
De domeinmodel is het hart van de softwaretoepassing, die de bedrijfsregels en kernlogica. De domeinobjecten in dit model bevatten specifieke bedrijfswaarden en regels.
Vervolgens hebben we de poorten, leidingen tussen de domeinmodel en de buitenwereld. Primaire poorten de bedrijfslogicaZe dienen als toegangspoort tot de kern van de applicatie. Ze vertegenwoordigen de use cases die de applicatie ondersteunt.
Secundaire poortenzijn daarentegen naar buiten gericht. Ze geven interfaces weer die de applicatie nodig heeft van de buitenwereld, zoals persistentielagen of externe services.
Als laatste hebben we de adapters, die fungeren als vertalers tussen de domeinmodel en de buitenwereld. Ze converteren gegevens van het formaat dat wordt gebruikt door externe systemen naar het formaat dat wordt gebruikt door de bedrijfslogicaen vice versa.
Poorten en adapters vormen de brug tussen de applicatiekern en de externe actoren. De primaire poorten vertegenwoordigen de business use cases die de applicatie blootstelt, waardoor externe actoren kunnen communiceren met de applicatie. Zie ze als de service-interfaces in uw bedrijfslaag.
Secundaire poorten daarentegen zijn interfaces die nodig zijn voor uw toepassing vanuit de buitenwereld. Dit kunnen diensten zijn zoals databasetoegang, webdiensten of zelfs tijdsdiensten. Ze leggen bloot wat nodig is voor de applicatie, onafhankelijk van enige technologie of leveranciersspecifieke karakteristieken.
Adapters zijn de fysieke verschijningsvormen van deze poorten. Ze vertalen de gegevens van het formaat dat wordt gebruikt door de bedrijfslogica naar het formaat dat wordt gebruikt door de externe actoren en vice versa. Deze adapters kunnen technologiespecifieke adapterconversies zijn voor REST API's, SQL databases of berichtensystemen, maar het kunnen ook batchscripts of gebruikersinterface code. De adapters vormen de grens van de applicatie, waardoor de applicatie technologieneutraal is.
Primaire poorten vertegenwoordigen de bewerkingen die onze applicatie kan uitvoeren - de commando's die ons kerndomein kan accepteren. Ze worden vaak geïmplementeerd als interfaces in talen als JavaHierin wordt gedefinieerd welke bewerkingen de applicatie biedt.Primaire adapterszijn dus de implementaties van deze interfaces voor specifieke externe actoren.
Aan de andere kant zijn secundaire poorten interfaces die het kerndomein gebruikt voor interactie met de buitenwereld. Dit kunnen interfaces zijn voor het persisteren van domeinobjecten of het versturen van notificaties. Secundaire adapters zijn de eigenlijke implementaties van deze interfaces - een SQL-database adapter of een adapter voor e-mailmeldingen, bijvoorbeeld.
Samen zijn de primaire en secundaire poorten en adapters vormen een flexibele, modulaire grens rond de applicatie, waardoor de domein logica van technische zorgen. Ze dwingen een zuivere scheiding van verantwoordelijkheden af en zorgen ervoor dat verschillende delen van het systeem onafhankelijk van elkaar kunnen evolueren.
De afhankelijkheidsregel is een fundamenteel principe in Zeshoekige architectuur dat stelt dat afhankelijkheden naar de kern van de applicatie moeten wijzen. De kern van de applicatie is niet afhankelijk van een bepaalde database, UI of andere externe instantie.
Dit principe sluit nauw aan bij de Principe van afhankelijkheidsomkering (DIP), één van de SOLID principes van object georiënteerd ontwerp. DIP stelt dat modules op hoog niveau (bedrijfslogica of domeinlaag moeten niet afhankelijk zijn van modules op laag niveau (zoals de database-adapter). In plaats daarvan zouden beide afhankelijk moeten zijn van abstracties. Door deze omkering van afhankelijkheden kunnen de modules op hoog niveau worden geïsoleerd van veranderingen in modules op laag niveau, wat een ontwerp bevordert waarbij de bedrijfslogica stuurt de algemene architectuur aan.
In kaart brengen is een essentieel proces in Zeshoekige architectuurwaarbij een technologiespecifieke adapter gegevens converteert van het formaat dat wordt gebruikt door externe systemen naar een formaat dat onze domeinlaag kan begrijpen. Deze mapping vergemakkelijkt de vertaling tussen de interne en externe representaties van gegevens in de applicatie.
Als er bijvoorbeeld een HTTP-verzoek binnenkomt in onze applicatie vanaf een externe interface zoals een REST APIDe verzoekgegevens moeten worden vertaald van JSON naar domeinobjecten die de applicatie kan gebruiken. Deze vertaling is de verantwoordelijkheid van de adapters.
Omgekeerd, wanneer de applicatie een antwoord moet versturen, converteren de adapters de domeinobjecten terug naar JSON. Hierdoor kan de kernapplicatie onwetend blijven van de bijzonderheden van de externe wereld, terwijl het ervoor zorgt dat het binnenkomende gegevens correct kan interpreteren en uitgaande gegevens kan opmaken.
Zeshoekige architectuur biedt een schat aan voordelen, die grotendeels kunnen worden toegeschreven aan de ontkoppeling van softwaretoepassingen van hun externe elementen en de duidelijke afbakening tussen de verschillende onderdelen van een systeem.
Een van de fundamentele voordelen is de scheiding van zorgen, wat de onderhoudbaarheid en leesbaarheid van code bevordert. De ontkoppeling van de kern bedrijfslogica van de buitenwereld biedt ruimte voor veranderingen in technologiespecifieke adapters, databases en gebruikersinterfaces zonder de kern te veranderen bedrijfslogica.
Zeshoekige architectuur blinkt ook uit op het gebied van testbaarheid. Doordat de architectuur externe afhankelijkheden isoleert, kunnen ontwikkelaars geautomatiseerde regressietests uitvoeren en geautomatiseerde testsuites gemakkelijker. Deze isolatie vergroot de veerkracht van de applicatie, omdat veranderingen in één component geen nadelige invloed hebben op de andere componenten.
Bovendien ondersteunt de architectuur meerdere adapters voor dezelfde poort, waardoor meerdere adapters voor dezelfde secundaire poort mogelijk zijn. Deze flexibiliteit stelt de applicatie in staat om te communiceren met verschillende typen databases of om verschillende soorten databases te ondersteunen. gebruikersinterface platforms.
Op het gebied van softwareontwikkeling is onderhoudbaarheid vaak een gewilde eigenschap, maar het is er een die traditionele architectuurstijlen moeilijk kunnen bieden. Zeshoekige architectuur valt hier op door zijn sterke nadruk op onderhoudbaarheid.
Door te focussen op scheiding van zorgen, Zeshoekige architectuur zorgt ervoor dat wijzigingen in een deel van de applicatie niet doorwerken in andere delen. Deze eigenschap helpt bij het verminderen van de tijd en moeite die besteed wordt aan het begrijpen en debuggen van de code.
Daarnaast moedigt de architectuur hergebruik van code aan door een ontwerp te bevorderen waarbij de kern bedrijfslogica is geïsoleerd van de specifieke technologieën die worden gebruikt om de applicatie aan te sturen. Deze ontkoppeling stelt ontwikkelaars in staat om te wisselen, te upgraden of te refactoren. externe interfaces zonder de kernlogica aan te tasten, waardoor het risico op het introduceren van bugs afneemt.
Technische schuld, een belangrijk aandachtspunt bij softwareontwikkeling, verwijst naar de toekomstige kosten van refactoring en het repareren van shortcuts en hacks in de code. Zeshoekige architectuur biedt een proactieve aanpak om dergelijke schulden te beperken.
Door een duidelijke scheiding aan te brengen tussen de kern bedrijfslogica en externe componenten, Zeshoekige architectuur vermindert de kans op verstrengelde code die hoofdpijn bij het onderhoud kan veroorzaken en de technische schuld kan vergroten. De inherente onderhoudbaarheid en testbaarheid van de architectuur spelen ook een rol bij het verminderen van de technische schuld, omdat ze de introductie van bugs helpen voorkomen en het refactoren vergemakkelijken.
Bovendien is het vermogen van Zeshoekige architectuur om veranderingen in de infrastructuur te ondersteunen zonder dat daarvoor veranderingen in de bedrijfslogica biedt een beschermende buffer tegen technische schuld. Dankzij deze mogelijkheid kunnen teams zich aanpassen aan veranderingen in vereisten of technologieën zonder grote delen van de applicatie te moeten herschrijven.
In de praktijk, Zeshoekige architectuur brengt een gestructureerde benadering van softwareontwikkeling. De zeshoekige grens rond de kernapplicatie geeft een duidelijke afbakening van waar de applicatie eindigt en de buitenwereld begint.
De adapters fungeren als poortwachters die verzoeken van externe actoren vertalen in een vorm die de kernapplicatie kan begrijpen en vice versa. Door dit te doen, zorgen ze ervoor dat de kernapplicatie agnostisch blijft ten opzichte van de specifieke kenmerken van de buitenwereld, of het nu een database, een externe APIof een gebruikersinterface.
Domain-Driven Design (DDD) is een softwareontwikkelingsmethodologie die prioriteit geeft aan de belangrijkste bedrijfsconcepten, of de domein logicaals belangrijkste drijfveer van het ontwerp. Deze methodologie sluit opmerkelijk goed aan bij Zeshoekige architectuurwaarin ook het belang van de bedrijfslogica en de domeinmodel in de architectuur.
In de context van Zeshoekige architectuurDDD zorgt ervoor dat de modules op hoog niveau van de applicatie - de domeinlagen - onafhankelijk zijn van externe elementen zoals de gebruikersinterface of de database. Deze onafhankelijkheid wordt gewaarborgd door de poorten en adapters, die de domeinlaag afschermen van de specifieke kenmerken van de externe systemenwaardoor de domein logica om onafhankelijk te evolueren.
Bovendien, Zeshoekige architectuur vormt een aanvulling op de strategische ontwerpprincipes van DDD, waaronder het concept van begrensde contexten. Elke begrensde context in DDD kan worden gezien als een zeshoek in Zeshoekige architectuurmet het domeinmodel als kern en de poorten en adapters die als de grenzen fungeren.
Microservices, een andere hedendaagse architectuurstijl, kan veel voordeel halen uit Zeshoekige architectuur. De gedecentraliseerde aard van microservices - waarbij elke service een specifieke bedrijfscapaciteit inkapselt - sluit goed aan bij de inkapseling van bedrijfslogica binnen de kern van de zeshoek.
Net zoals elke microservice losjes gekoppeld moet zijn aan andere, moet elke zeshoek in Zeshoekige architectuur is ook geïsoleerd van anderen en communiceert alleen via de gedefinieerde poorten en adapters. Hierdoor kan elke microservice zijn eigen zeshoekige architectuurwat resulteert in een verzameling autonome, losjes gekoppelde diensten.
De isolatie die wordt geboden door Zeshoekige architectuur kan bijzonder nuttig zijn bij het omgaan met de complexiteit en het gedistribueerde karakter van microservices. Door de kernbedrijfslogica van de buitenwereld, Zeshoekige architectuur zorgt ervoor dat de bedrijfslogica blijft intact, ongeacht wijzigingen in andere services of externe systemen.
De manier waarop software wordt ontworpen, kan een grote invloed hebben op hoe het zich in de loop der tijd ontwikkelt. vergelijken Zeshoekige architectuur met andere architecturen geeft ons een beter inzicht in de sterke punten en mogelijke nadelen.
Gelaagde architectuur is een traditionele architectonisch patroon dat een applicatie structureert in logische lagen - vaak presentatie-, bedrijfs- en gegevenstoegangslagen. Het belangrijkste nadeel van dit patroon is dat het een sterke afhankelijkheid tussen de lagen stimuleert, wat leidt tot een situatie waarin veranderingen in één laag kunnen doorwerken in de hele applicatie.
In tegenstelling, Zeshoekige architectuur minimaliseert dergelijke afhankelijkheden. In plaats van lagen heeft het een applicatiekern omgeven door verwisselbare adapters. Veranderingen in een databaseserver hebben bijvoorbeeld alleen invloed op de corresponderende adapter, waardoor de applicatiekern en andere adapters onaangeroerd.
Schone architectuureen andere architectonisch patroondeelt veel overeenkomsten met Zeshoekige architectuur. Beiden benadrukken de scheiding van belangen, zijn gericht op het isoleren van de kern van het probleem. bedrijfsregels van externe details en zich houden aan de Principe van afhankelijkheidsomkering.
Echter, Zeshoekige architectuur richt zich meer op de interactie tussen de applicatie en de buiten wereld met behulp van poorten en adapters, terwijl Schone architectuur biedt een meer gedetailleerde structuur voor de binnenste lagen van de architectuur. Met andere woorden, Schone architectuur kan worden gezien als een superset van Zeshoekige architectuurmet extra richtlijnen voor het organiseren van de interne structuur van de applicatie.
Ui Architectuur is een andere bouwstijl die de isolatie van de kernbedrijfslogica van de externe interfaces en infrastructuur. Het heeft verschillende concentrische lagen met het domeinmodel in het midden, en elke laag kan alleen afhankelijk zijn van de lagen erbinnen.
Hoewel ze een gemeenschappelijk doel hebben, zijn Hexagonal en Ui Architectuur bereiken het op iets andere manieren. Ui Architectuur legt veel nadruk op de richting van afhankelijkheden en zorgt ervoor dat alle afhankelijkheden naar binnen gaan. Zeshoekige architectuurondersteunt weliswaar ook naar binnen gerichte afhankelijkheden, maar legt meer nadruk op de interactie met de buitenwereld via de poorten en adapters.
Een van de sterkste punten van Zeshoekige architectuur is de focus op testbaarheid. Door de kernapplicatie te isoleren van de buitenwereld Via poorten en adapters maakt de Hexagonal Architecture de uitvoering van geautomatiseerde testen die vertrouwen kunnen geven in de stabiliteit en correctheid van de software.
In een Zeshoekige architectuurde primaire poortendie de kern inkapselen bedrijfsregelskan onafhankelijk van de buitenwereld worden getest. Bijvoorbeeld, in plaats van te communiceren met een echte database tijdens het testen, kan een database-adapter kan worden vervangen door een testdubbel die het gedrag van een echte database simuleert. Hierdoor kunnen ontwikkelaars zich richten op het testen van de bedrijfsregelsin plaats van de database-interactie.
Bovendien, geautomatiseerde regressietests kunnen eenvoudig worden geconstrueerd om te valideren dat het systeem zich gedraagt zoals verwacht wanneer er wijzigingen worden aangebracht. Dit niveau van testbaarheid is een belangrijk voordeel als het gaat om het onderhouden en updaten van software, omdat het helpt om problemen vroeg in het ontwikkelproces op te sporen en op te lossen.
Bovendien is de structuur van Zeshoekige architectuur ondersteunt ook integratietesten. Door de externe componenten (zoals een databaseserver of een externe API) met testdubbels kunnen ontwikkelaars testen hoe de applicatiekern integreert met deze componenten zonder gebruik te hoeven maken van de eigenlijke externe systemen. Dit kan de snelheid en betrouwbaarheid van de tests enorm verbeteren.
Zeshoekige architectuur komt naar voren als een verleidelijke oplossing in de enorme uitgestrektheid van softwareontwikkelingsstrategieën. Het onderscheidt zich door de ontkoppeling van de applicatiekern van de externe omgeving, waardoor een hoge mate van onderhoudbaarheid, testbaarheid en flexibiliteit wordt gegarandeerd. Door deze scheiding kunnen ontwikkelaars zich gemakkelijker richten op de kern bedrijfslogicaterwijl de software tegelijkertijd beter bestand is tegen wijzigingen in externe systemen.
Hoewel er compromissen zijn verbonden aan Hexagonal Architecture, maken de vele voordelen het een zeer waardevolle aanwinst voor de gereedschapskist van elke ontwikkelaar. Op het gebied van softwarearchitectuurblijft het zeshoekige model zijn dominante positie behouden.
Dit artikel, doorspekt met codevoorbeeldenis gericht op een grondig begrip van Zeshoekige architectuur en de potentiële voordelen ervan. Houd in gedachten dat het geheim van een effectieve architectuur niet zit in het blind volgen van patronen, maar in het begrijpen van de onderliggende principes en deze doordacht implementeren om aan specifieke eisen te voldoen.
In de Hexagonal Architecture wordt de interface gedefinieerd tussen de toepassingslaag en de gegevenslaag is van het grootste belang. Of je nu een softwarearchitect overweegt om deze methodologie toe te passen, of een ontwikkelaar die ernaar streeft om de complexiteit ervan te begrijpen, is het duidelijk dat de invloed van deze architectuur blijft groeien. Het laat verschillende manieren zien waarop het effectief kan worden gebruikt. Bijvoorbeeld in een bank toepassingde archiefinterface kan fungeren als een secundaire adapter die de de kern van de toepassing met externe code. Deze scheiding biedt de flexibiliteit om de concrete implementatie van een bestandssysteem of een specifieke technologie, zonder de applicatieservices te beïnvloeden.
De ontwikkeling team kan nu werken aan de linkerzijde van de applicatie zonder zich zorgen te maken over externe factorenom zo een naadloze voortgang te garanderen. En zo sluiten we onze verkenning van de wereld van Zeshoekige architectuurEen architectuurstijl die zijn invloed op het landschap van softwareontwikkeling blijft uitbreiden.