La arquitectura hexagonal , o arquitectura de puertos y adaptadores , es un patrón arquitectónico utilizado en el diseño de software . Su objetivo es crear componentes de aplicaciones acoplados de forma flexible que se puedan conectar fácilmente a su entorno de software mediante puertos y adaptadores . Esto hace que los componentes sean intercambiables en cualquier nivel y facilita la automatización de pruebas. [1]
La arquitectura hexagonal fue inventada por Alistair Cockburn en un intento de evitar los conocidos problemas estructurales en el diseño de software orientado a objetos , como las dependencias no deseadas entre capas y la contaminación del código de la interfaz de usuario con la lógica empresarial . Se discutió al principio en la wiki de Portland Pattern Repository ; [2] [3] en 2005 Cockburn la rebautizó como "Puertos y adaptadores". [1] En abril de 2024, Cockburn publicó un libro completo sobre el tema, en coautoría con Juan Manuel Garrido de Paz. [4]
El término "hexagonal" proviene de las convenciones gráficas que muestran el componente de la aplicación como una celda hexagonal . El propósito no era sugerir que habría seis bordes/puertos, sino dejar suficiente espacio para representar las diferentes interfaces necesarias entre el componente y el mundo externo. [1]
La arquitectura hexagonal divide un sistema en varios componentes intercambiables y poco acoplados, como el núcleo de la aplicación, la base de datos, la interfaz de usuario, los scripts de prueba y las interfaces con otros sistemas. Este enfoque es una alternativa a la arquitectura tradicional en capas.
Cada componente está conectado a los demás a través de una serie de "puertos" expuestos. La comunicación a través de estos puertos sigue un protocolo determinado en función de su finalidad. Los puertos y protocolos definen una API abstracta que se puede implementar mediante cualquier medio técnico adecuado (por ejemplo, invocación de métodos en un lenguaje orientado a objetos , llamadas a procedimientos remotos o servicios web ).
La granularidad de los puertos y su número no están restringidos:
Los adaptadores son el nexo de unión entre los componentes y el mundo exterior. Adaptan los intercambios entre el mundo externo y los puertos que representan los requisitos del interior del componente de la aplicación. Puede haber varios adaptadores para un puerto; por ejemplo, los datos pueden ser proporcionados por un usuario a través de una interfaz gráfica de usuario o una interfaz de línea de comandos, por una fuente de datos automatizada o por scripts de prueba.
El término "hexagonal" implica que el concepto consta de 6 partes, mientras que solo hay 4 áreas clave. El uso del término proviene de las convenciones gráficas que muestran el componente de la aplicación como una celda hexagonal . El propósito no era sugerir que habría seis bordes/puertos, sino dejar suficiente espacio para representar las diferentes interfaces necesarias entre el componente y el mundo externo. [1]
Según Martin Fowler , la arquitectura hexagonal tiene el beneficio de utilizar similitudes entre la capa de presentación y la capa de fuente de datos para crear componentes simétricos hechos de un núcleo rodeado de interfaces, pero con el inconveniente de ocultar la asimetría inherente entre un proveedor de servicios y un consumidor de servicios que se representaría mejor como capas. [5]
Según algunos autores, la arquitectura hexagonal está en el origen de la arquitectura de microservicios . [6]
La arquitectura de cebolla propuesta por Jeffrey Palermo en 2008 es similar a la arquitectura hexagonal: también externaliza la infraestructura con interfaces para asegurar un acoplamiento flexible entre la aplicación y la base de datos. [7] Descompone aún más el núcleo de la aplicación en varios anillos concéntricos utilizando la inversión de control . [8]
La arquitectura limpia propuesta por Robert C. Martin en 2012 combina los principios de la arquitectura hexagonal, la arquitectura cebolla y varias otras variantes. Proporciona niveles adicionales de detalle del componente, que se presentan como anillos concéntricos. Aísla adaptadores e interfaces (interfaz de usuario, bases de datos, sistemas externos, dispositivos) en los anillos externos de la arquitectura y deja los anillos internos para casos de uso y entidades . [9] [10] La arquitectura limpia utiliza el principio de inversión de dependencias con la regla estricta de que las dependencias solo deben existir entre un anillo externo a un anillo interno y nunca al contrario.
{{cite web}}
: CS1 maint: varios nombres: lista de autores ( enlace )