# Arquitectura hexagonal (programari)

L'Arquitectura Hexagonal, donada a conèixer per Alistair Cockburn - i també coneguda com a arquitectura de ports i adaptadors -, té com a principal motivació separar la nostra aplicació en diferents capes o regions amb la seva pròpia responsabilitat. D'aquesta manera aconsegueix desacoblar capes de la nostra aplicació permetent que evolucionin de manera aïllada. A més, tenir el sistema separat per responsabilitats ens facilitarà la reutilització.

## Origen

L'arquitectura hexagonal va ser inventada per Alistair Cockburn amb l'objectiu de resoldre els inconvenients habituals de les arquitectures en capes, on és fàcil trobar dependències no desitjades entre capes i l'acoblament del codi d'interfície de l'usuari amb la lògica i les regles empresarials, que dificulta l'adaptació de les aplicacions davant de canvis de tecnologia. Va ser publicat l'any 2005.

## Principis

L'arquitectura hexagonal separa els diversos components i els relaciona mitjançant interfícies i mapejadors. D'aquesta manera, la base de dades pot ser reestructurada i el model, a la part de negoci, no veure's afectat, per exemple.
En llenguatge d'arquitectura hexagonal, cada component està connectat amb els altres mitjançant "ports" que representen un canal de comunicació. La comunicació a través d'aquests ports segueix un protocol que depèn de la finalitat de la interacció. Els ports i els protocols defineixen una interfície de programació d'aplicacions (API) abstracta, que es pot implementar per qualsevol mitjà tècnic adequat (per exemple: invocació de mètodes en un llenguatge orientat a objectes, trucades a procediments remots o fins i tot serveis web).
La granularitat dels ports i el seu nombre no està restringit:
* un únic port podria, en determinats casos, ser suficient (per exemple, en el cas d'un simple consumidor de servei)
* hi ha ports per a fonts d'esdeveniments (UI, alimentació automàtica), notificacions (notificacions sortints), base de dades (per tal de connectar el component amb un SGBD adequat) i per a l'administració (per controlar el component)
* en un cas extrem podria haver-hi un port diferent per a cada cas d'ús
Els adaptadors representen el pegament entre els components i el món exterior. Adapten els intercanvis entre el món exterior i el seu port, reflectint aquest últim requeriments interns del component d'aplicació. Hi pot haver diversos adaptadors per a un únic port, per exemple, quan les dades les proporciona un usuari mitjançant una interfície de línia d'ordres o gràfica, o enviades per una font de dades automatitzada o scripts de prova.

## Ús, crítica i evolució

Segons Martin Fowler, l'arquitectura hexagonal té l'avantatge d'utilitzar similituds entre la capa de presentació i la capa de font de dades per crear components simètrics que consisteixen en un nucli envoltat d'interfícies, però amb l'inconvenient d'emmascarar l'asimetria inherent entre un productor de serveis i un consumidor del servei.
Segons alguns autors, l'arquitectura hexagonal és l'origen de l'arquitectura basada en microserveis.

## Variants

L'arquitectura de la ceba, proposada per Jeffrey Palermo el 2008, és similar a l'arquitectura hexagonal. De fet, també externalitza la infraestructura mitjançant interfícies adequades per garantir l'absència d'acoblament entre l'aplicació i la base de dades. Tanmateix, descompon el nucli de l'aplicació d'una manera més precisa, en forma d'anells concèntrics mitjançant la inversió del control.
L'"Arquitectura neta", proposada per Robert C. Martin el 2012, combina els principis de l'arquitectura hexagonal, l'arquitectura de la ceba i diverses altres variants arquitectòniques. Així, ofereix nivells addicionals de detall del component, que es presenten en forma d'anells concèntrics. Aquesta arquitectura aïlla adaptadors i interfícies (interfície d'usuari, bases de dades, sistemes externs, dispositius) als anells exteriors de l'arquitectura i dedica els anells interiors a casos d'ús i entitats. L'arquitectura "neta" utilitza el principi d'inversió de dependència amb la regla estricta que les dependències només han d'existir entre un anell exterior i un anell més interior i mai a l'inrevés.

## Referències

* ↑ Salguero, Edu. «Arquitectura Hexagonal» (en anglès). Medium, 22-05-2020. [Consulta: 18 juny 2020].
* ↑ Fowler, Martin. Patterns of enterprise application architecture (en anglès). 20. Boston: Addison-Wesley, 2003, p. 533. ISBN 9780321127426, 0321127420.
* ↑ «The Onion Architecture : part 1» (en anglès), 28-07-2008. [Consulta: 18 setembre 2024].
* ↑ «The Clean Code Blog» (en anglès). [Consulta: 18 setembre 2024].
* ↑ Martin, Robert. Clean architecture : a craftsman's guide to software structure and design (en anglès). Londres: Prentice Hall, 2018, p. 404. ISBN 9780134494166 0134494164.