terminal

codeando_simple

terminal

menu

terminal

search_module

guest@codeandosimple: ~/system/search $ grep -r "" .

Press [ENTER] to execute search

Status

Engine: Ready

Database: Online

Index: V2.1.0_LATEST

bash — cat clean-architecture.md
guest@codeandosimple: ~/blog/architecture $ cat clean-architecture.md

Arquitectura Limpia_

// "Controlar la complejidad es la esencia de la programación" - Brian Kernigan

Clean Architecture o Arquitectura Limpia es un término que introdujo Robert C. Martin (Uncle Bob), como un enfoque de diseño de software que se centra principalmente en dos puntos, la separación de responsabilidades y la independencia del dominio.

Para esto distingue dos partes:

  • El Core: Lo principal, la parte que da sentido y origen al sistema, la lógica de negocio, los casos de uso.

  • Los Detalles: Todo lo externo, la tecnología, las herramientas (frameworks, UI, base de datos, sistemas externos) permiten que el sistema funcione pero no forman parte del negocio.

# Principios Fundamentales

  • Independencia de Frameworks: El sistema no debe depender de la existencia de alguna librería de software. Permite usar frameworks como herramientas.

  • Testeable: La lógica de negocio puede ser testeada sin la UI, la base de datos o el servidor web.

  • Independencia de la UI y DB: Tanto la interfaz de usuario como el motor de base de datos pueden cambiar sin afectar el Core.

# Estructura

Círculos concéntricos de Clean Architecture
  1. 1

    Entities (Enterprise Business Rules): Contienen las reglas de negocio más generales y de alto nivel.

  2. 2

    Use Cases (Application Business Rules): Lógica de negocio específica de la aplicación. Orquestan el flujo de datos.

  3. 3

    Interface Adapters: Convierten datos entre el formato conveniente para los casos de uso y mecanismos externos.

  4. 4

    Frameworks and Drivers: Capa externa con bases de datos, web frameworks, etc.

La regla de la dependencia

La dependencia del código fluye de afuera hacia adentro. Lo que está adentro no conoce nada de lo que está afuera.

# Escenario Típico

Flujo de datos en Clean Architecture

El Controller toma la entrada del usuario, la empaqueta y la pasa a través de una interfaz InputBoundary al UseCaseInteractor. Este último usa las Entities y los DataAccess para procesar la petición y devuelve un OutputData al Presenter, quien prepara los datos para la View.

# Ventajas

  • verified

    Flexibilidad

    Los componentes pueden cambiarse con poco impacto en otras partes.

  • verified

    Sostenibilidad

    Independencia total de frameworks que podrían quedar obsoletos.

# Desventajas

  • warning

    Sobrediseño

    Puede ser excesiva para aplicaciones muy sencillas.

  • warning

    Coste Inicial

    Requiere más tiempo de arquitectura y desarrollo al principio.

# Ejemplo: E-commerce

Estructura de paquetes E-commerce

Entidades: Pedido.java

package ecommerce.dominio;

public class Pedido {
    private Producto producto;
    private int cantidad;

    public Pedido(Producto producto, int cantidad) {
        this.producto = producto;
        this.cantidad = cantidad;
    }
}

Caso de Uso: AgregarProductoCarritoInteractor.java

package ecommerce.casosdeuso;

public class AgregarProductoCarritoInteractor {
    private RepositorioPedidos repositorio;
    private PedidoOutputBoundary presenter;

    public void agregar(Pedido pedido) {
        // Lógica para agregar producto al carrito
        repositorio.guardarPedido(pedido);
        presenter.presentarConfirmacionPedido(pedido);
    }
}

Presentador: PedidoPresenter.java

package ecommerce.presentador;

public class PedidoPresenter implements PedidoOutputBoundary {
    @Override
    public void presentarConfirmacionPedido(Pedido pedido) {
        System.out.println("Pedido confirmado: " + pedido.getProducto().getNombre());
    }
}

# Conclusiones

La Arquitectura Limpia de Robert Martin da un marco sólido para construir sistemas con alta cohesión y bajo acoplamiento, aplicando principios como SOLID para lograr aplicaciones sostenibles a largo plazo.