0

Arquitectura de Software con C# 07: Introducción a Clean Architecture

Introducción a la clase

Ahora que hemos terminado con los fundamentos de arquitectura de software y DDD, comenzamos el Módulo 2 enfocado en Clean Architecture + DDD.

En esta clase, exploraremos los principios fundamentales de Clean Architecture, cómo se estructura y por qué es una de las arquitecturas más utilizadas en la industria.

¿Qué obtendrás de esta clase?

  • Comprenderás qué es Clean Architecture y por qué se utiliza.
  • Aprenderás los principios fundamentales en los que se basa.
  • Identificarás la estructura típica de un proyecto con Clean Architecture.
  • Conocerás los beneficios y desafíos de este enfoque.

¿Qué es Clean Architecture?

Clean Architecture es un enfoque arquitectónico propuesto por Robert C. Martin (Uncle Bob) que busca desacoplar la lógica de negocio de los detalles técnicos, como bases de datos, frameworks y UI.

Se basa en la idea de que la aplicación debe ser independiente de cualquier tecnología externa, lo que permite mayor mantenibilidad, testabilidad y escalabilidad.

Principios de Clean Architecture

Clean Architecture se basa en los siguientes principios fundamentales:

  • Independencia del framework → La lógica de negocio no debe depender de ningún framework.
  • Testabilidad → Es más fácil probar la aplicación al separar la lógica del negocio.
  • Independencia de UI y bases de datos → El dominio de negocio no debe depender de la interfaz de usuario ni de la base de datos.
  • Desacoplamiento y modularidad → Cada capa cumple una responsabilidad bien definida.

Estructura de Clean Architecture

Clean Architecture se organiza en capas concéntricas, donde la lógica de negocio está en el centro y las tecnologías externas en la periferia.

Capas principales

  1. Dominio (Entities) → Contiene las Entidades y Value Objects. Representa las reglas de negocio puras.
  2. Aplicación (Use Cases) → Contiene Casos de Uso que coordinan las reglas del negocio.
  3. Infraestructura (Persistence, Adapters) → Implementa detalles técnicos como bases de datos y servicios externos.
  4. Presentación (UI, API, Controllers) → Maneja la interfaz con el usuario (Web, API, CLI, etc.).

Ejemplo de Clean Architecture en C#

Capa de Dominio (Entities)

public class Pedido
{
    public int Id { get; private set; }
    public string Cliente { get; private set; }
    public decimal Total { get; private set; }

    public Pedido(int id, string cliente, decimal total)
    {
        Id = id;
        Cliente = cliente;
        Total = total;
    }

    public void AplicarDescuento(decimal porcentaje)
    {
        Total -= Total * (porcentaje / 100);
    }
}

Capa de Aplicación (Casos de Uso)

public interface IPedidoRepository
{
    void Guardar(Pedido pedido);
}

public class CrearPedidoUseCase
{
    private readonly IPedidoRepository _repository;

    public CrearPedidoUseCase(IPedidoRepository repository)
    {
        _repository = repository;
    }

    public void Ejecutar(Pedido pedido)
    {
        _repository.Guardar(pedido);
    }
}

Capa de Infraestructura (Implementación del repositorio)

public class PedidoRepository : IPedidoRepository
{
    public void Guardar(Pedido pedido)
    {
        Console.WriteLine("Pedido guardado en la base de datos.");
    }
}

Capa de Presentación (API/Controlador)

[ApiController]
[Route("api/pedidos")]
public class PedidoController : ControllerBase
{
    private readonly CrearPedidoUseCase _crearPedidoUseCase;

    public PedidoController(CrearPedidoUseCase crearPedidoUseCase)
    {
        _crearPedidoUseCase = crearPedidoUseCase;
    }

    [HttpPost]
    public IActionResult CrearPedido([FromBody] Pedido pedido)
    {
        _crearPedidoUseCase.Ejecutar(pedido);
        return Ok("Pedido creado exitosamente");
    }
}

Ventajas de Clean Architecture

  • Código modular y reutilizable → Facilita la extensión del sistema.
  • Independencia de infraestructura → Permite cambiar tecnologías sin afectar la lógica del negocio.
  • Mayor testabilidad → Se pueden escribir pruebas unitarias para la lógica de negocio sin depender de la base de datos.
  • Mantenibilidad a largo plazo → La separación de responsabilidades permite realizar cambios sin afectar otras capas.

Desventajas de Clean Architecture

  • Mayor esfuerzo inicial → Se requiere más tiempo y planificación para organizar el código correctamente.
  • Curva de aprendizaje → Puede ser difícil de entender para desarrolladores sin experiencia en arquitectura.
  • Sobreingeniería en proyectos pequeños → No es ideal para aplicaciones simples o de corta vida.

Cuestionario de Autoevaluación

  • ¿Qué es Clean Architecture y cuál es su objetivo principal?
  • ¿Cuáles son las cuatro capas principales de Clean Architecture?
  • ¿Por qué es importante desacoplar la lógica de negocio de la infraestructura?
  • ¿En qué escenarios Clean Architecture es más útil?
  • ¿Cuáles son las principales ventajas y desventajas de este enfoque?

Resumen de la Clase

  • Clean Architecture busca desacoplar la lógica de negocio de los detalles técnicos.
  • Se organiza en cuatro capas principales: Dominio, Aplicación, Infraestructura y Presentación.
  • Permite una alta modularidad y testabilidad, pero requiere más esfuerzo inicial.
  • Es ideal para aplicaciones con lógica de negocio compleja y de largo plazo.

Próximo paso

En la siguiente clase veremos cómo funcionan las capas de Clean Architecture en detalle y cómo se relacionan entre sí.

Fernando Sonego

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *