Werk je met data intensieve applicaties dan ontkom je vaak niet aan vele koppelingen met externe systemen. Koppelingen om gegevens te verwerken. Koppelingen om gegevens binnen te halen. Of koppelingen om juist gegevens te versturen. Echter staat de wereld niet stil en ook deze externe koppelingen zijn soms aan vervanging toe. Bijvoorbeeld als ze technisch niet meer voldoen of wanneer de applicatie nieuwe functies krijgt. Je wilt dan ook jouw applicaties zo ontwikkelt hebben dat zij hiervoor behoed zijn en snel in kunnen spelen op een veranderende wereld. Maar hoe doe je dat?
Een traditionele kijk op applicatie structuur is er een van layered design. De lagen zijn dan vaak gebaseerd op technologische keuzes en architectuur voor een applicatie. Dit heeft impact op de flexibiliteit en uitbreidbaarheid van de applicatie. Hexagonal design legt de focus op het domein. In dit blog duiken we in de verschillende lagen van deze bijzondere zeshoekige structuur.
Eerst domein, dan applicatie en dan adapter
Hexagonal design kent min of meer drie lagen, namelijk de domeinlaag, applicatielaag en de adapterlaag. Bij hexagonal design staat het domein voor op, dit is dan ook de eerste laag van Hexagonal design. In de eerste laag wordt het domein gemodelleerd. Daarna volgt een applicatielaag welke de applicatie- en business logica omhelst en de applicatie opstelt door port op te stellen. Als laatst is de adapterlaag, welke via de eerder genoemde poorten inhaakt op de applicatielaag en implementatie is voor de verschillende koppelingen en ingangen.Â
- Het domein staat centraal en dat is belangrijk.
- Daarnaast is het domein een model van de werkelijkheid.
- Het domein is ook de kern van de applicatie omdat het domein je business regels modelleert.
Zoals je allicht al tussen de lijnen doorleest hangen Domain Driven Design en hexagonal design in dezelfde sfeer en worden frequent samen toegepast.Â
Geen lagen maar ports en adapters
In plaats van meer lagen toe te voegen kent hexagonal design een concept genaamd ports en adapters. Dit is de manier om van buiten je domein de interactie aan te gaan met je domein. Een poort definieert een stuk gewenst gedrag vaak in de vorm van een interface. Een adapter implementeert deze met implementatie specifieke code, specifiek voor een bepaalde koppeling. Niet langer hebben specifieke technieken hun eigen laag. In plaats daarvan spreken alle losse koppelingen en interactie methods zoals een GUI, SOAP, REST of commands op hetzelfde niveau.Â
Het meest voor de hand liggende voordeel is dat een applicatie niet langer gebaseerd is op de technologieën die initieel gekozen zijn. Door enkel een adapter uit te wisselen kan gebruik worden gemaakt van andere search engine. Of door het toevoegen van een adapter kan een extra koppeling worden gebouwd met een tweede email marketing dienst. Maar er kunnen ook zonder ingrijpende architecturale aanpassingen nieuwe porten worden geschreven tegen het domein aan om bijvoorbeeld nieuwe koppelingen met derde partijen tot stand te brengen.
Hexagonal is agile en wendbaar
Voor de product owner betekent dit dat tussentijdse aanpassingen aan infrastructuur of wisselen van externe diensten geen enkel probleem is! Hexagonal design leent zich voor een agile werkwijze. Daarnaast heeft dit voor de codebase ook een positieve impact. De code blijft aanzienlijk overzichtelijker, omdat voor ieder onderdeel van de code een duidelijke plaats is. Ook hoeft er geen plek te worden gevonden tussen of in bestaande lagen voor nieuwe implementaties, die niet binnen de voorbedachte architectuur passen. Dit zorgt ervoor dat de code leesbaarder en overzichtelijker blijft. Hexagonal design zorgt op deze manier ervoor dat jouw applicatie net zo wendbaar is als jouw business zelf is.
Bij Enrise weten wij maar al te goed dat software altijd in beweging is. Wil je meer weten, neem dan contact met ons op.