A lecke végére el tudod magyarázni, mit old meg a hexagonális architektúra, meg tudod nevezni a port és az adapter szerepét, és meg tudod különböztetni a rétegzett szerkezettől.
Miért kell?
A rétegzett szerkezetben az üzleti logika gyakran kötődik az adatbázishoz vagy a megjelenítéshez, mert a függőség lefelé mutat. Ezért nehéz tesztelni a logikát az igazi adatbázis nélkül, és nehéz kicserélni a külső technológiát. A hexagonális architektúra ezt a függést fordítja meg.
Mi ez?
Alistair Cockburn leírása szerint a cél az, hogy az alkalmazást ugyanúgy vezérelhesse felhasználó, másik program, automatikus teszt vagy kötegelt szkript, és fejleszthető, tesztelhető legyen valódi eszközök és adatbázisok nélkül.
A port egy célirányos beszélgetés: az alkalmazás szempontjából definiált interfész, amely megmondja, milyen céllal és milyen formában kommunikál a külvilággal.
Az adapter egy technológiaspecifikus illesztő, amely a port felé fordítja egy konkrét külső technológiát (felhasználói felület, teszt, adatbázis) és fordítva.
Cockburn megkülönböztet elsődleges (az alkalmazást vezérlő) és másodlagos (az alkalmazás által vezérelt) szereplőket; ezeket vezérlő (driving) és vezérelt (driven) adapternek is nevezi.
flowchart LR
UI["Felületi adapter"] --> P1["Bejövő port"]
T["Teszt adapter"] --> P1
subgraph Core["Alkalmazás és üzleti logika"]
P1 --> L["Üzleti szabályok"]
L --> P2["Kimenő port"]
end
P2 --> DBA["Adatbázis-adapter"]
P2 --> EXT["Külső szolgáltatás adaptere"]
Az üzleti logika a portokat ismeri, a technológiát nem. Az adapterek cserélhetők: ugyanahhoz a porthoz csatlakozhat valódi adatbázis és tesztben használt helyettesítő is.
Hogyan viszonyul a rétegzetthez és a többihez?
A rétegzett szerkezetben a függőség iránya fentről lefelé mutat; a hexagonálisban a függőség a belső felé irányul: az adapterek függenek a portoktól, a mag nem függ az adaptertől. A hexagonális szerkezet nem szolgáltatásokra bont: ugyanabban a telepítési egységben él, és egy moduláris monolit moduljának is lehet ilyen belső szerkezete (2.4). Gyakran emlegetik a hasonló elven működő „onion” és „clean” architektúrát is; ezek a belső függés irányát hasonlóan kezelik, de a tananyag nem tárgyalja külön őket.
Szempontok szerint
Szempont
Hexagonális szerkezet
Csatolás
A mag nem kötődik a technológiához; az adapter és a port között szerződés van
Tesztelhetőség
Jó, mert a külvilág helyettesíthető
Deployolhatóság
Nem változtat: a szerkezet ettől még lehet egy egység
Költség
Több interfész és illesztő, kisebb alkalmazásnál felesleges lehet
Gyakori tévhitek
Állítás
Pontosítás
„A hexagon hat oldala hat portot jelent.”
Cockburn szerint a hatszög csak azért hatszög, hogy legyen hely a portok és adapterek berajzolására; a portok száma kevés (2–4) szokott lenni.
„A hexagonális architektúra szolgáltatásokra bont.”
Belső szerkezet; egy telepítési egységben is működik.
„Az adapter tartalmazza az üzleti szabályt.”
Az adapter csak fordít; a szabály a magban van.
Röviden
A port az alkalmazás szempontjából megadott beszélgetés, az adapter a konkrét technológiához igazít.
A függőség a mag felé mutat, ezért a külvilág cserélhető és helyettesíthető.
A hexagonális szerkezet belső szerkezet, nem szétbontás.
Ellenőrző kérdések
Mi a különbség a port és az adapter között?
Miben tér el a függőségek iránya a rétegzett szerkezettől?
Hexagonális architektúra: portok és adapterek
Célok
A lecke végére el tudod magyarázni, mit old meg a hexagonális architektúra, meg tudod nevezni a port és az adapter szerepét, és meg tudod különböztetni a rétegzett szerkezettől.
Miért kell?
A rétegzett szerkezetben az üzleti logika gyakran kötődik az adatbázishoz vagy a megjelenítéshez, mert a függőség lefelé mutat. Ezért nehéz tesztelni a logikát az igazi adatbázis nélkül, és nehéz kicserélni a külső technológiát. A hexagonális architektúra ezt a függést fordítja meg.
Mi ez?
Alistair Cockburn leírása szerint a cél az, hogy az alkalmazást ugyanúgy vezérelhesse felhasználó, másik program, automatikus teszt vagy kötegelt szkript, és fejleszthető, tesztelhető legyen valódi eszközök és adatbázisok nélkül.
flowchart LR UI["Felületi adapter"] --> P1["Bejövő port"] T["Teszt adapter"] --> P1 subgraph Core["Alkalmazás és üzleti logika"] P1 --> L["Üzleti szabályok"] L --> P2["Kimenő port"] end P2 --> DBA["Adatbázis-adapter"] P2 --> EXT["Külső szolgáltatás adaptere"]Az üzleti logika a portokat ismeri, a technológiát nem. Az adapterek cserélhetők: ugyanahhoz a porthoz csatlakozhat valódi adatbázis és tesztben használt helyettesítő is.
Hogyan viszonyul a rétegzetthez és a többihez?
A rétegzett szerkezetben a függőség iránya fentről lefelé mutat; a hexagonálisban a függőség a belső felé irányul: az adapterek függenek a portoktól, a mag nem függ az adaptertől. A hexagonális szerkezet nem szolgáltatásokra bont: ugyanabban a telepítési egységben él, és egy moduláris monolit moduljának is lehet ilyen belső szerkezete (2.4). Gyakran emlegetik a hasonló elven működő „onion” és „clean” architektúrát is; ezek a belső függés irányát hasonlóan kezelik, de a tananyag nem tárgyalja külön őket.
Szempontok szerint
Gyakori tévhitek
Röviden
Ellenőrző kérdések
Források