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
-
1
Entities (Enterprise Business Rules): Contienen las reglas de negocio más generales y de alto nivel.
-
2
Use Cases (Application Business Rules): Lógica de negocio específica de la aplicación. Orquestan el flujo de datos.
-
3
Interface Adapters: Convierten datos entre el formato conveniente para los casos de uso y mecanismos externos.
-
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
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
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.