ARQUITECTURA HEXAGONAL

¿Qué es la arquitectura hexagonal?

La arquitectura hexagonal, a la que también se le conoce como arquitectura de puertos y adaptadores, es una arquitectura de software que se basa en la idea de aislar la lógica comercial central de las preocupaciones externas, por medio de la separación de la aplicación en componentes débilmente acoplados.

Los 3 principios de la arquitectura hexagonal

Este tipo de arquitectura de software se sustenta en 3 principios básicos a cumplir:

1. A la izquierda, el lado del usuario

Este es el lado a través del cual el usuario o los programas externos interactuarán con la aplicación, y es la que contiene el código que permite dichas interacciones. 

Por lo general, su código de interfaz de usuario, sus rutas HTTP para una API, sus serializaciones JSON para programas que consumen su aplicación están aquí.

Este es el lado donde encontramos a los actores que impulsan la Lógica de Negocios.

2. La Lógica de Negocios, en el centro

Esta es la parte que queremos aislar de los lados izquierdo y derecho. Contiene todo el código que concierne e implementa la lógica empresarial. 

El vocabulario empresarial y la lógica empresarial pura, que se relaciona con el problema concreto que resuelve su aplicación, todo lo que la hace rica y específica está en el centro. 

Idealmente, un experto en el dominio que no sabe cómo codificar, podría leer un fragmento de código en esta parte y señalarle una inconsistencia. De hecho, si lo piensas, es algo que podría pasarte si eres el desarrollador.

3. A la derecha, el lado del servidor

Aquí es donde encontraremos lo que tu aplicación necesita, lo que hace que funcione. 

Contiene detalles esenciales de la infraestructura, como el código que interactúa con la base de datos, realiza llamadas al sistema de archivos o el código que maneja las llamadas HTTP a otras aplicaciones de las que depende, por ejemplo.

Este es el lado donde encontramos a los actores que son manejados por la Lógica de Negocios.

¿Por qué es importante la arquitectura hexagonal?


Es importante por varias razones clave relacionadas con la mantenibilidad, flexibilidad y escalabilidad del software. A continuación se mencionan algunas características:

1. Separación de Responsabilidades

Separa claramente las preocupaciones del sistema en capas independientes. Esto permite que los componentes de negocio (dominio) no dependan de detalles técnicos como la interfaz de usuario, la base de datos, o servicios externos.

2. Facilidad para el Cambio

Al desacoplar el núcleo de la aplicación de los detalles técnicos, es más sencillo realizar cambios en cualquiera de estos detalles sin afectar el resto del sistema. Por ejemplo, cambiar la base de datos o la interfaz de usuario se puede hacer sin modificar la lógica de negocio.

3. Testabilidad

El diseño facilita la creación de pruebas unitarias y de integración. Dado que los componentes de negocio están desacoplados de las interfaces externas, pueden ser probados de manera aislada utilizando mocks o stubs para simular las interacciones con el exterior.

4. Mantenibilidad

La separación de responsabilidades y el desacoplamiento de componentes hacen que el código sea más fácil de entender, mantener y refactorizar. Los cambios en una parte del sistema son menos propensos a causar efectos secundarios en otras partes.

5. Escalabilidad

Permite escalar el sistema de manera más controlada. Puedes agregar nuevas funcionalidades, adaptadores o mejorar los existentes sin necesidad de una reestructuración completa del sistema.

6. Interoperabilidad

La arquitectura facilita la integración con diferentes sistemas externos mediante adaptadores específicos. Esto permite que la aplicación interactúe con diversos servicios, API, y tecnologías sin depender directamente de ellos.

7. Evolución Tecnológica

Al estar el núcleo del negocio separado de los detalles técnicos, es más sencillo adoptar nuevas tecnologías o reemplazar tecnologías existentes sin impactar la lógica de negocio.

8. Flexibilidad en el Desarrollo

Permite a los equipos de desarrollo trabajar en diferentes partes del sistema de manera más independiente. Por ejemplo, un equipo puede trabajar en la lógica de negocio mientras otro se enfoca en la implementación de la interfaz de usuario o la integración con servicios externos.


Comentarios

Entradas más populares de este blog

GUIA VISUAL STUDIO 2022 (Backend) Arquitectura Hexagonal

GUIA SQL SERVER (Backend)