Clean architecture en .NET y C#

En este artículo, mostraré una breve introducción sobre Clean Architecture y también un ejemplo práctico de una solución siguiendo los principios de Clean Architecture en .NET 6

– ¿Qué es Clean architecture? –

Clean Architecture es una filosofía de diseño de software. El principal objetivo de esta arquitectura es la capacidad de separar el código en sus diferentes responsabilidades, hacer el código mucho más entendible en el presente y futuro, testeable y fácil de integrar.

La regla primordial que hace que esta arquitectura funcione es la regla de dependencia. Las dependencias del código solo pueden moverse desde los niveles externos hacia adentro, es decir, las dependencias del código fuente solo pueden apuntar hacia adentro. El código de las capas internas no pueden tener conocimiento de las funciones de las capas externas.

Todas las dependencias fluyen hacia adentro y core no depende de ninguna otra capa. Infraestructura y presentación dependen de core, pero no el uno del otro (necesariamente).

Las capas de dominio y aplicación están en el centro del diseño. Esto se conoce como el core del sistema. Core no debe depender del acceso a datos y otras preocupaciones de infraestructura.

Para invertir las dependencias se agregan interfaces o abstracciones dentro de Core que son implementadas por capas fuera de este.

Ventajas de Clean architecture

Clean Architecture ofrece una serie de ventajas para el desarrollo de software, entre las que se incluyen:

  1. Facilita el mantenimiento del código: la separación de las diferentes capas de la arquitectura facilita el mantenimiento del código a largo plazo, ya que los cambios en una capa no afectan a las demás capas.
  2. Mejora la escalabilidad del sistema: permite añadir nuevas funcionalidades al sistema de forma modular, sin afectar a otras partes del código. También, al separar las capas del sistema, se pueden optimizar y escalar independientemente, lo que facilita la adaptación del sistema a diferentes situaciones y necesidades.
  3. Aumenta la calidad del software: fomenta el uso de patrones de diseño y buenas prácticas de programación, lo que se traduce en un código más limpio, legible y mantenible.
  4. Pruebas automatizadas es mucho más fácil: al separar las capas del sistema, se pueden hacer pruebas de forma aislada de la infraestructura, lo que facilita el desarrollo de pruebas unitarias y de integración. Además, las reglas comerciales se pueden probar sin la interfaz de usuario, la base de datos, el servidor web o cualquier otro elemento externo.
  5. Facilita la evolución del sistema: facilita la evolución del sistema a largo plazo, ya que permite adaptarse a cambios en las tecnologías, requisitos del negocio, etc. Además, la separación de las capas del sistema permite reutilizar componentes y funcionalidades en diferentes partes del sistema, lo que facilita el desarrollo y reduce los costes de mantenimiento.
  6. Independiente de la base de datos y de cualquier cosa externa, puede cambiar Oracle o SQL Server por Mongo o cualquier otra cosa. Sus reglas comerciales no están vinculadas a la base de datos, simplemente no saben nada sobre el mundo exterior.

Clean Architecture es una metodología que ayuda a desarrollar sistemas de software escalables, mantenibles y flexibles, mediante la separación de responsabilidades en diferentes capas y la utilización de patrones de diseño y buenas prácticas de programación. Esto se traduce en un código más limpio, legible y mantenible, que facilita la evolución del sistema y aumenta la calidad del software.

– Capas principales –

Domain

La capa de dominio encapsula reglas de negocio (Enterprise business rules). El dominio no se ve afectado por cambios externos, al no tener referencias hacia otras capas.

Aquí se realizan Unit tests.

Application

La capa de aplicación contiene reglas de negocio de la aplicación (Application business rules).

Esta capa define interfaces que son implementadas por capas externas. Por ejemplo, si la aplicación necesita acceder a un servicio de notificación, se agregaría una nueva interfaz a la aplicación y se crearía una implementación dentro de la infraestructura.

Esta capa implementa CQRS y patrón mediador (Command Query Responsibility Segregation), con cada caso de uso comercial representado por un solo comando o consulta.

Aquí se realizan Integration tests.

Infrastructure

La capa Infraestructura contiene clases para acceder a recursos externos. Estas clases deben basarse en interfaces definidas dentro de la capa de aplicación.

Tecnologías

Descargas

El código fuente de este artículo se puede encontrar en GitHub

Enlaces de interés

CQRS y MediatR

One comment

Comments are closed.