Skip to content
Language:hu Author:Laborci Gergely
architecture

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.

  • 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

  1. Mi a különbség a port és az adapter között?
  2. Miben tér el a függőségek iránya a rétegzett szerkezettől?
  3. Mikor felesleges a port bevezetése?

Források

Prerequisites (2)

  • monolit
  • kohézió és csatolás

Teaches (1)

  • hexagonális architektúra