¿Qué es Arquitectura Hexagonal?

La Arquitectura Hexagonal, es un estilo de Arquitectura de Software que fue propuesto por Alistair Cockburn en 2005, con su propósito principal el de aislar la lógica de negocio de la infraestructura.

La Arquitectura Hexagonal, es un estilo de Arquitectura de Software que fue propuesto por Alistair Cockburn en 2005, con su propósito principal el de aislar la lógica de negocio de la infraestructura.

El diseño propuesto inicial solo contemplaba 2 capas, siendo el núcleo el dominio (reglas de negocio), y la capa externa la infraestructura.

Aunque hoy en día es más común ver Arquitecturas Hexagonales con 3 capas, añadiendo una capa extra entre infraestructura y dominio llamada: Aplicación.

La propuesta de esta Arquitectura es simple, tener el dominio separado de la infraestructura, y la manera como se comunica la infraestructura y el dominio es por medio de Adaptadores y Puertos.

Un puerto no es más que una interface de programación, un contrato que define que métodos existirán en la implementación, los puertos son de 2 tipos:

  • Puertos de entrada (Puerto primario): son interfaces que definen las acciones de un caso de uso, por ejemplo: registrar usuario, login, crear venta.
  • Puertos de salida (Puerto secundario): son interfaces que definen que es lo que el sistema necesita, es decir, que es lo que tus reglas de negocio van a necesitar del mundo exterior, de la infraestructura, por ejemplo: guardar en base de datos, enviar correo, enviar notificación push.

Los puertos serán los que hagan la comunicación entre la infraestructura y el dominio, de esta manera, nuestro dominio puede ser codificado sin necesidad de conocer cosas como frameworks, bases de datos, servicios externos. El dominio solo se centra en las acciones que necesita.

Los Adaptadores son la otra entidad existente en esta Arquitectura, los Adaptadores son de 2 tipos:

  • Adaptador Primario: son clases que usan los Puertos de Entrada (Puertos Primarios), el Adaptador Primario sería, lo que ejecuta un usuario o actor de entrada, por ejemplo, un API, una aplicación de consola, un formulario. La implementación del Puerto primario se encuentra en la capa Dominio cuando se usan 2 capas, o en la capa Aplicación cuando se usan 3 capas.
  • Adaptador Secundario: son clases que se encuentran en la infraestructura, clases que se encargan de implementar los Puertos de Salida (Puertos Secundarios), por ejemplo, son clases que se encarguen de: mensajes por smtp a correo, queries u ORM a base de datos, solicitudes HTTP a servicios externos.

En resumen, los adaptadores primarios usan los puertos de entrada, y los adaptadores secundarios implementan los puertos de salida.

De esta manera, la Arquitectura Hexagonal propone separar el dominio, permitiendo aislarlo para poder utilizar las reglas de negocio en distintas aplicaciones, haciendo cambios en infraestructura sin que afecten el dominio, la esencia del sistema.

También te permite hacer pruebas de las reglas de negocio, sin necesidad de involucrarte con la infraestructura.

Y, por último, te permite escalar el sistema de una manera limpia, ya que la mayoría de los cambios ocurren en la infraestructura, estos se pueden hacer sin necesidad de afectar el dominio.

La Arquitectura Hexagonal, es un estilo de Arquitectura muy utilizado hoy en día, y si quieres aprender más sobre esto, puedes tomar mi curso de Arquitectura Hexagonal, el cual tiene ejemplos con código que incluyen ejemplos realistas: Ir al Curso de Arquitectura Hexagonal.

También te dejo un video donde explico la Arquitectura Hexagonal paso a paso:

Si quieres aprender más sobre Programación, puedes suscribirte a mi plataforma Metal Code, donde encontrarás cursos de programación a un precio siempre accesible: https://metalcode.io/

Curso de Clean Architecture

He lanzado un curso de Clean Architecture en Udemy.

En este curso me he enfocado en contemplar las debilidades que mucho programador tiene a la hora de querer aprender Arquitectura de Software, ya que estas debilidades hacen parecer la arquitectura un tema complejo.

Comienza el curso con una sección donde aprenderemos los conceptos fundamentales de los paradigmas más utilizados en programación: paradigma estructurad, orientado a objetos y funcional.

Posterior me he enfocado en conceptos fundamentales de Arquitectura de Software General, lo cual, separado a Clean Architecture, te servirán a la hora de aprender otra arquitectura.

Por ultimo, veremos una sección donde veremos los conceptos de Clean Architecture, bajo una explicación teórica y práctica con código en C# .NET.

Puedes adquirir mi curso en este enlace.

¿Por qué Debes Aprender Arquitectura de Software?

La Arquitectura de Software es fundamental para cualquier desarrollador que busque elevar la calidad de sus proyectos, haciéndolos más escalables, mantenibles y económicos en términos de modificaciones futuras.

La Arquitectura de Software es fundamental para cualquier desarrollador que busque elevar la calidad de sus proyectos, haciéndolos más escalables, mantenibles y económicos en términos de modificaciones futuras.

Tener una Arquitectura de Software en tus proyectos, te brindara ventajas, como mayor facilidad para trabajar en equipo, facilidad a la hora de tomar decisiones de cambios, testeabilidad, reusabilidad, en si, tener una Arquitectura te apoyara a crear proyectos más fáciles de comprender, tanto a nivel código como diseño.

En el siguiente video te muestro un ejemplo de los beneficios de la Arquitectura de Software, ejemplos con código:

¿Qué se hace en el Diseño de Software?

En el diseño de software se organizan las ideas para tomar decisiones sobre como se organizara en parte el software a crear, desde la arquitectura, el diseño de base de datos, que tecnologías se utilizaran así como la seguridad que se implementará.

El diseño de software es una parte importante al momento de desarrollar un software.

En el diseño de software se organizan las ideas para tomar decisiones sobre como se organizara en parte el software a crear, desde la arquitectura, el diseño de base de datos, que tecnologías se utilizaran así como la seguridad que se implementará.

En el siguiente video te explico de manera rápida como es esta etapa, importante antes de poner la primer línea de código.

Patrones de diseño en Programación funcional

En el siguiente video te muestro la equivalencia de prácticas de patrones de diseño en programación funcional.

Los patrones de diseño son técnicas las cuales nos resolverán problemas en especifico.

Estas técnicas están basadas en el paradigma de programación orientado a objetos, haciendo uso de herencia e implementación de interfaces.

Hay dudas sobre si los patrones de diseño pueden utilizarse en otro paradigma, por ejemplo la programación funcional.

En el siguiente video te muestro la equivalencia de prácticas de patrones de diseño en programación funcional.

Patrones de Arquitectura vs Patrones de Diseño

En el siguiente video te explicare que es un patrón de arquitectura y que es un patrón de diseño, su diferencia, y como estos pueden convivir en la creación de un software.

En el siguiente video te explicare que es un patrón de arquitectura y que es un patrón de diseño, su diferencia, y como estos pueden convivir en la creación de un software.

¿Qué son los Patrones de Diseño?

Los patrones de diseño son técnicas que nos sirven para resolver problemas en común.

Los patrones de diseño son técnicas que nos sirven para resolver problemas en común.

Nos sirven para no tener que reinventar la rueda en como se va a crear un objeto, como se estructuraran nuestras clases, o como se van a comportar estas mismas, bajo ciertos requerimientos en especifico.

En el siguiente video te daré una introducción en la cual explico 3 ejemplos yendo del más fácil al mas complejo.

Ejemplo en sistema real del patrón de diseño Singleton, MVC .Net

En este video te enseñare el patrón de diseño Singleton funcionando en un problema real. Utilizaremos este patrón para construir una clase la cual recolecte de una base de datos textos los cuales serán mostrados en todas las vistas de un proyecto de MVC .Net