Šestihranná architektura (software) - Hexagonal architecture (software)

The šestihranná architekturanebo architektura portů a adaptérů, je architektonický vzor používaný v softwarový design. Zaměřuje se na vytváření volně vázané aplikační komponenty, které lze snadno připojit k jejich softwarovému prostředí pomocí portů a adaptéry. Díky tomu jsou komponenty vyměnitelné na jakékoli úrovni a usnadňuje se automatizace testů.[1]

Původ

Šestihrannou architekturu vynalezl Alistair Cockburn ve snaze vyhnout se známým strukturálním nástrahám v roce 2006 objektově orientovaný návrh softwaru, například nežádoucí závislosti mezi vrstvy a kontaminace uživatelské rozhraní kód s obchodní logika a publikováno v roce 2005.[2]

Termín „šestihranný“ pochází z grafických konvencí, které zobrazují komponentu aplikace jako a šestihranný buňka. Účelem nebylo navrhnout, aby existovalo šest hranic / portů, ale ponechat dostatek prostoru pro reprezentaci různých rozhraní potřebných mezi komponentou a vnějším světem.[1]

Zásada

Příklad šestihranné architektury s vnitřním šestiúhelníkem představujícím jádro aplikace a vnějším šestiúhelníkem pro adaptéry, přičemž hranicí mezi těmito dvěma jsou porty
Příklad šestihranné architektury

Šestihranná architektura rozděluje systém na několik volně spojených vyměnitelných komponent, jako je jádro aplikace, databáze, uživatelské rozhraní, testovací skripty a rozhraní s jinými systémy. Tento přístup je alternativou k tradiční vrstvené architektuře.

Každá součást je připojena k ostatním prostřednictvím řady odkrytých „portů“. Komunikace přes tyto porty se řídí daným protokolem v závislosti na jejich účelu. Porty a protokoly definují abstrakt API které lze provést jakýmkoli vhodným technickým prostředkem (např. vyvolání metody v objektově orientovaný jazyk, vzdálená volání procedur nebo webové služby ).

Granularita portů a jejich počet není omezen:

  • jeden port by mohl v některých případech stačit (např. v případě jednoduchého spotřebitele služby);
  • obvykle existují porty pro zdroje událostí (uživatelské rozhraní, automatické podávání), oznámení (odchozí oznámení), databáze (za účelem propojení komponenty s jakýmkoli vhodným DBMS) a administrace (pro ovládání komponenty);
  • v extrémním případě může být pro každý jiný port případ použití, V případě potřeby.

Adaptéry jsou lepidlem mezi komponenty a vnějším světem. Přizpůsobují výměny mezi vnějším světem a porty, které představují požadavky uvnitř aplikační komponenty. Pro jeden port může existovat několik adaptérů, například pokud mohou data poskytovat uživatel prostřednictvím grafického uživatelského rozhraní nebo rozhraní příkazového řádku, automatizovaný zdroj dat nebo testovací skripty.

Využití, kritika a evoluce

Podle Martin Fowler má hexagonální architektura výhodu v tom, že používá podobnosti mezi prezentační vrstvou a vrstvou zdroje dat k vytváření symetrických komponent vyrobených z jádra obklopeného rozhraními, ale s nevýhodou skrývání inherentní asymetrie mezi poskytovatelem služby a spotřebitelem služby, která by lépe byla reprezentovány jako vrstvy.[3]

Podle některých autorů je hexagonální architektura původem mikroslužby architektura.[4]

Varianty

Cibulová architektura navržená Jeffrey Palermem v roce 2008 je podobná hexagonální architektuře: externalizuje také infrastrukturu správnými rozhraními, aby bylo zajištěno volné propojení mezi aplikací a databází.[5] Dále rozkládá jádro aplikace na několik soustředných prstenců pomocí inverze kontroly.[6]

Čistou architekturu navrhl Robert C. Martin v roce 2012 kombinuje principy hexagonální architektury, cibulové architektury a několika dalších variant; Poskytuje další úrovně podrobností součásti, které jsou prezentovány jako soustředné kroužky. Izoluje adaptéry a rozhraní (uživatelské rozhraní, databáze, externí systémy, zařízení) ve vnějších kruzích architektury a ponechává vnitřní kroužky pro případy užití a subjekty[7],.[8] Čistá architektura využívá principu závislost inverze s přísným pravidlem, že závislosti budou existovat pouze mezi vnějším kruhem a vnitřním kruhem a nikdy naopak.

Viz také

Reference

  1. ^ A b Alistair, Cockburn (01.04.2005). „Hexagonal architecture“. alistair.cockburn.us. Citováno 2020-11-18.
  2. ^ Stenberg, Jan (2014-10-31). „Exploring the Hexagonal Architecture“. InfoQ. Citováno 2019-08-12.
  3. ^ Fowler, Martin (2003). Vzory architektury podnikových aplikací. Addison-Wesley. p. 21. ISBN  0-321-12742-0. OCLC  50292267.
  4. ^ Rajesh R. V. (2017). Mikroslužby Spring 5.0: Vytvářejte škálovatelné mikroslužby s reaktivními proudy, Spring Boot, Docker a Mesos (Druhé vydání.). Packt Publishing. s. 13–14. ISBN  978-1-78712-051-8. OCLC  999610958.
  5. ^ Jeffrey, Palermo (2008-07-29). „Cibulová architektura: 1. část“. Programování v Palermu. Citováno 2019-08-12.
  6. ^ Chatekar, Suhas (2015). Učení NHibernate 4: prozkoumejte plný potenciál NHibernate k vytvoření robustního přístupového kódu k datům. Packt Publishing. 249–250. ISBN  978-1-78439-206-2. OCLC  937787252.
  7. ^ Martin, Robert, C. (2012-08-12). „Čistá architektura | Blog Clean Coder“. blog.cleancoder.com. Citováno 2019-08-12.
  8. ^ Martin, Robert C. (2017). Čistá architektura: průvodce řemeslníka po struktuře a designu softwaru. Prentice Hall. ISBN  978-0-13-449416-6. OCLC  1004983973.