Introducción a la clase
Hemos analizado Clean Architecture, Hexagonal Architecture y Vertical Slice Architecture, sus diferencias y cuándo usarlas. Ahora veremos ejemplos reales en la industria y mejores prácticas para aplicar estas arquitecturas en proyectos reales.
En esta clase aprenderás:
- Casos de uso reales de cada arquitectura en empresas y productos conocidos
- Cómo aplicarlas correctamente en distintos escenarios
- Buenas prácticas para mantener código escalable y mantenible
Ejemplo 1: Uso de Clean Architecture en una Plataforma de Gestión Empresarial (ERP)
Contexto del problema
- La empresa desarrolla un ERP con módulos de facturación, inventario y gestión de clientes
- Se necesita una arquitectura mantenible a largo plazo, con múltiples equipos trabajando en el código
- La lógica de negocio es compleja y no debe depender de infraestructura específica
Solución aplicada
- Se implementó Clean Architecture, separando la lógica de negocio en capas bien definidas
- Se desacopló el dominio de la persistencia para poder cambiar bases de datos en el futuro
- Se usó CQRS y MediatR para manejar los comandos y consultas
- Se integraron pruebas unitarias para validar las reglas de negocio sin depender de la base de datos
Beneficios obtenidos
- Facilidad para agregar nuevas funcionalidades sin afectar el código existente
- Cambio de base de datos sin modificar la lógica de negocio
- Código modular y fácilmente testeable
Ejemplo 2: Uso de Hexagonal Architecture en una API de Pagos
Contexto del problema
- La empresa maneja una API de pagos que necesita conectarse con distintos proveedores de pago (PayPal, Stripe, MercadoPago)
- Se requiere una arquitectura que permita cambiar proveedores sin afectar el código central
- La aplicación debe ser altamente extensible para agregar nuevos métodos de pago en el futuro
Solución aplicada
- Se utilizó Hexagonal Architecture con Puertos y Adaptadores
- Se definieron interfaces (puertos) para la comunicación con los proveedores de pago
- Se crearon adaptadores para cada integración de pagos (PayPalAdapter, StripeAdapter)
- Se desacopló completamente el núcleo del negocio de la infraestructura
Beneficios obtenidos
- Fácil integración de nuevos proveedores de pago sin modificar la lógica de negocio
- Pruebas unitarias aisladas del código de infraestructura
- Cambio de base de datos o API de terceros sin afectar el núcleo de la aplicación
Ejemplo 3: Uso de Vertical Slice Architecture en una Plataforma de E-Commerce
Contexto del problema
- Un equipo de desarrollo trabaja en una plataforma de E-Commerce con rápido crecimiento
- Se necesitan agregar Features como «Gestión de Pedidos», «Usuarios», «Carrito de Compras» sin impactar el resto del código
- Se busca que cada equipo pueda trabajar en una Feature de manera independiente
Solución aplicada
- Se utilizó Vertical Slice Architecture, dividiendo el código en Slices independientes por Feature
- Se usó MediatR para manejar comandos y consultas sin necesidad de capas de servicios
- Cada Feature tiene su propia capa de dominio, aplicación e infraestructura dentro de su módulo
Beneficios obtenidos
- Equipos trabajan en Features sin afectar otras partes del código
- Escalabilidad modular → Se pueden agregar nuevas Features sin modificar las existentes
- Desarrollo más rápido y menos acoplamiento
Mejores Prácticas para Aplicar Estas Arquitecturas
1. Separar correctamente la lógica de negocio de la infraestructura
- No acceder a la base de datos directamente desde los casos de uso
- Utilizar interfaces en la capa de aplicación para desacoplar infraestructura
2. Usar inyección de dependencias para mejorar la flexibilidad
- Registrar servicios en
Program.cs
para evitar dependencias directas - Ejemplo en C#:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddScoped<IPedidoRepository, PedidoRepository>();
builder.Services.AddMediatR(cfg => cfg.RegisterServicesFromAssembly(typeof(Program).Assembly));
var app = builder.Build();
app.Run();
3. Aplicar principios SOLID en cualquier arquitectura
- Single Responsibility → Cada módulo debe tener una única responsabilidad
- Dependency Inversion → La lógica de negocio no debe depender de infraestructura
4. Evitar sobrecomplicar la arquitectura en proyectos pequeños
- No es necesario implementar Clean Architecture en un CRUD simple
- Si un sistema solo necesita unas pocas funcionalidades, Vertical Slice Architecture es suficiente
5. Implementar pruebas unitarias para validar la lógica de negocio
- Los casos de uso deben ser testeables sin acceder a la base de datos
- Ejemplo de prueba de un caso de uso en C#:
[Fact]
public void CrearPedido_DeberiaCrearPedidoConProductos()
{
var pedido = new Pedido(1, "Cliente1");
pedido.AgregarProducto(new Producto(1, "Producto1", 100));
Assert.Equal(1, pedido.Productos.Count);
}
Cuestionario de Autoevaluación
- ¿Cómo elegirías la mejor arquitectura para un proyecto nuevo?
- ¿Qué ventajas tiene Hexagonal Architecture en la integración con APIs externas?
- ¿Por qué Vertical Slice Architecture facilita el desarrollo modular?
- ¿Qué beneficios tiene usar MediatR en Clean Architecture?
- ¿Cómo asegurarse de que la lógica de negocio esté desacoplada de la infraestructura?
Resumen de la Clase
- Clean Architecture es ideal para aplicaciones grandes con reglas de negocio complejas
- Hexagonal Architecture es útil para sistemas que requieren flexibilidad en la infraestructura
- Vertical Slice Architecture permite escalar proyectos rápidamente con Features independientes
- Aplicar principios SOLID, inyección de dependencias y pruebas unitarias mejora la calidad del código
Próximo paso
En la siguiente clase veremos errores comunes al diseñar arquitecturas de software y cómo evitarlos.