Articulo de referencia

Arquitectura hexagonal (software)

La arquitectura hexagonal , o arquitectura de puertos y adaptadores , es un estilo arquitectónico utilizado en el diseño de software . Su objetivo es crear componentes de aplica...

La arquitectura hexagonal , o arquitectura de puertos y adaptadores , es un estilo arquitectónico utilizado en el diseño de software . Su objetivo es crear componentes de aplicación débilmente acoplados que puedan conectarse fácilmente a su entorno de software mediante puertos y adaptadores . Esto permite el intercambio de componentes en cualquier nivel y facilita la automatización de pruebas. [ 1 ]

Origen

La arquitectura hexagonal fue inventada por Alistair Cockburn en un intento de evitar los conocidos problemas estructurales del 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 de negocio . Se discutió por primera vez en la wiki del Portland Pattern Repository ; [ 2 ] [ 3 ] en 2005 Cockburn la renombró como "Puertos y adaptadores". [ 1 ] En abril de 2024, Cockburn publicó un libro exhaustivo 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 exterior. [ 1 ]

Principio

Ejemplo de arquitectura hexagonal con un hexágono interior que representa el núcleo de la aplicación y un hexágono exterior para los adaptadores, siendo el límite entre ambos los puertos.
Ejemplo de arquitectura hexagonal

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 por capas.

Cada componente se conecta con los demás mediante una serie de "puertos" expuestos. La comunicación a través de estos puertos sigue un protocolo determinado según su finalidad. Los puertos y protocolos definen una API abstracta que puede implementarse 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:

  • En algunos casos, un solo puerto podría ser suficiente (por ejemplo, en el caso de un consumidor de servicio simple);
  • Normalmente, existen puertos para fuentes de eventos (interfaz de usuario, alimentación automática), notificaciones (notificaciones salientes), base de datos (para conectar el componente con cualquier sistema de gestión de bases de datos adecuado) y administración (para controlar el componente);
  • En un caso extremo, podría haber un puerto diferente para cada caso de uso , si fuera necesario.

Los adaptadores son el nexo de unión entre los componentes y el mundo exterior. Gestionan el intercambio de información entre el mundo externo y los puertos que representan los requisitos internos del componente de la aplicación. Un mismo puerto puede tener varios adaptadores; por ejemplo, los datos pueden ser proporcionados por un usuario a través de una interfaz gráfica de usuario (GUI) o una interfaz de línea de comandos, por una fuente de datos automatizada o por scripts de prueba.

Crítica

El término "hexagonal" implica que el concepto consta de 6 partes, cuando en realidad solo existen 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 exterior. [ 1 ]

Según Martin Fowler , la arquitectura hexagonal tiene la ventaja de utilizar similitudes entre la capa de presentación y la capa de fuente de datos para crear componentes simétricos formados por 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 ]

Evolución

Según algunos autores, la arquitectura hexagonal es el origen de la arquitectura de microservicios . [ 6 ]

Variantes

La arquitectura 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 mediante 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 los adaptadores e interfaces (interfaz de usuario, bases de datos, sistemas externos, dispositivos) en los anillos exteriores de la arquitectura y deja los anillos interiores para los casos de uso y las 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 exterior y un anillo interior, y nunca al revés.

Véase también

Referencias

  1. 1 2 3 4 Cockburn, Alistair (2005-04-01). "Arquitectura hexagonal" . alistair.cockburn.us . Recuperado el 2020-11-18 .
  2. "Arquitectura hexagonal en la Wiki de C2" .
  3. "Arquitectura de puertos y adaptadores en la Wiki de C2" .
  4. "Arquitectura hexagonal explicada" .
  5. Fowler, Martin (2003). Patrones de arquitectura de aplicaciones empresariales . Addison-Wesley. pág. 21. ISBN  0-321-12742-0OCLC 50292267 
  6. Rajesh RV (2017). Microservicios Spring 5.0 : creación de microservicios escalables con Reactive Streams, Spring Boot, Docker y Mesos (Segunda edición). Packt Publishing. págs. 13–14 . ISBN    978-1-78712-051-8OCLC 999610958 
  7. Jeffrey, Palermo (29 de julio de 2008). "La arquitectura cebolla : parte 1" . Programación con Palermo . Recuperado el 12 de agosto de 2019 . 
  8. Chatekar, Suhas (2015). Aprendiendo NHibernate 4 : explore todo el potencial de NHibernate para construir código robusto de acceso a datos . Packt Publishing. pp. 249–250 . ISBN   978-1-78439-206-2OCLC 937787252 
  9. Martin, Robert, C. (12 de agosto de 2012). "La arquitectura limpia | Blog de Clean Coder" . blog.cleancoder.com . Recuperado el 12 de agosto de 2019 .{{cite web}}: CS1 maint: varios nombres: lista de autores ( enlace )
  10. Martin, Robert C. (2017). Arquitectura limpia : una guía práctica para la estructura y el diseño de software . Prentice Hall. ISBN  978-0-13-449416-6OCLC 1004983973 .​ 
Obtenido de " https://en.wikipedia.org/w/index.php?title=Hexagonal_architecture_(software)&oldid=1359802369 "