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 aplicación débilmente acoplados que se puedan conectar fácilmente a su entorno de software por medio de puertos y adaptadores . Esto hace que los componentes sean intercambiables 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 problemas estructurales conocidos en el diseño de software orientado a objetos , como dependencias no deseadas entre capas y contaminación del código de la interfaz de usuario con lógica empresarial , y se publicó en 2005 [2].
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 fronteras / puertos, sino dejar suficiente espacio para representar las diferentes interfaces necesarias entre el componente y el mundo externo. [1]
Principio
La arquitectura hexagonal divide un sistema en varios componentes intercambiables débilmente 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 en capas tradicional.
Cada componente está conectado a los demás a través de varios "puertos" expuestos. La comunicación a través de estos puertos sigue un protocolo determinado en función de su propósito. Los puertos y protocolos definen una API abstracta que se puede implementar por 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á restringida:
- en algún caso, un solo puerto podría ser suficiente (por ejemplo, en el caso de un simple consumidor de servicios);
- normalmente, hay puertos para fuentes de eventos (interfaz de usuario, alimentación automática), notificaciones (notificaciones salientes), base de datos (para conectar el componente con cualquier DBMS 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 pegamento 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, si un usuario puede proporcionar datos a través de una GUI o una interfaz de línea de comandos, una fuente de datos automatizada o scripts de prueba.
Crítica y evolución
- Crítica
El término "hexagonal" implica que hay 6 partes en el concepto, 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 fronteras / puertos, sino dejar suficiente espacio para representar las diferentes interfaces necesarias entre el componente y el mundo externo. [3]
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 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. eso sería mejor representado como capas. [4]
- Evolución
Según algunos autores, la arquitectura hexagonal está en el origen de la arquitectura de microservicios . [5]
Variantes
La arquitectura de cebolla propuesta por Jeffrey Palermo en 2008 es similar a la arquitectura hexagonal: también externaliza la infraestructura con interfaces adecuadas para asegurar un acoplamiento flexible entre la aplicación y la base de datos. [6] Descompone aún más el núcleo de la aplicación en varios anillos concéntricos mediante la inversión de control . [7]
La arquitectura limpia propuesta por Robert C. Martin en 2012 combina los principios de la arquitectura hexagonal, la arquitectura de cebolla y varias otras variantes; Proporciona niveles adicionales de detalle del componente, que se presentan como anillos concéntricos. Se aísla adaptadores e interfaces (interfaz de usuario, bases de datos, sistemas externos, dispositivos) en los anillos exteriores de la arquitectura y las hojas de los anillos interiores de los casos de uso y entidades [8] , . [9] La arquitectura limpia utiliza el principio de inversión de dependencia con la regla estricta de que las dependencias solo existirán entre un anillo exterior y un anillo interior y nunca lo contrario.
Ver también
Referencias
- ↑ a b Alistair, Cockburn (1 de abril de 2005). "Arquitectura hexagonal" . alistair.cockburn.us . Consultado el 18 de noviembre de 2020 .
- ^ Stenberg, enero (31 de octubre de 2014). "Explorando la Arquitectura Hexagonal" . InfoQ . Consultado el 12 de agosto de 2019 .
- ^ Alistair, Cockburn (1 de abril de 2005). "Arquitectura hexagonal" . alistair.cockburn.us . Consultado el 18 de noviembre de 2020 .
- ^ Fowler, Martin (2003). Patrones de arquitectura de aplicaciones empresariales . Addison-Wesley. pag. 21. ISBN 0-321-12742-0. OCLC 50292267 .
- ^ Rajesh RV (2017). Microservicios Spring 5.0: cree microservicios escalables con Reactive Streams, Spring Boot, Docker y Mesos (segunda edición). Packt Publishing. págs. 13-14. ISBN 978-1-78712-051-8. OCLC 999610958 .
- ^ Jeffrey, Palermo (29 de julio de 2008). "La arquitectura de la cebolla: parte 1" . Programando con Palermo . Consultado el 12 de agosto de 2019 .
- ^ Chatekar, Suhas (2015). Aprendiendo NHibernate 4: explore todo el potencial de NHibernate para crear un código de acceso a datos robusto . Packt Publishing. págs. 249-250. ISBN 978-1-78439-206-2. OCLC 937787252 .
- ^ Martin, Robert, C. (12 de agosto de 2012). "La arquitectura limpia | Blog Clean Coder" . blog.cleancoder.com . Consultado el 12 de agosto de 2019 .
- ^ Martin, Robert C. (2017). Arquitectura limpia: una guía del artesano para la estructura y el diseño de software . Prentice Hall. ISBN 978-0-13-449416-6. OCLC 1004983973 .