00 · Repaso

Conceptos principales de la sesión anterior

  • Identificar que problemas se pueden resolver con CQRS

    • Problemas de rendimiento

    • Problemas de escalabilidad

    • Problemas de mantenimiento

  • Conceptos clave de CQRS

    • Separación entre lectura y escritura

    • Eventos como fuente de verdad

    • Read-model vs. Write-model

    • Uso de proyectores para mantener la read-model actualizada

Repaso en profundidad para clarificar conceptos

Clarificación de las diferencias clave entre Command, Command Handler, y Use Case en una arquitectura DDD/CQRS.


1. Diagrama Conceptual de Responsabilidades

spinner

2. Diferencias Clave con Ejemplos

2.1 Command (DTO)

  • Qué es: Simple contenedor de datos sin lógica.

  • Propósito: Representar una intención de modificación.

2.2 Command Handler (Orquestador)

  • Qué es: Coordina flujo técnico (transacciones, logging).

  • Propósito: Preparar ejecución del caso de uso.

2.3 Use Case (Lógica de Negocio)

  • Qué es: Implementación concreta de reglas de negocio.

  • Propósito: Manipular agregados y persistir cambios.


3. Comparación Detallada

Aspecto

Command

Command Handler

Use Case

Responsabilidad

Datos de entrada

Flujo técnico

Reglas de negocio

Lógica

Ninguna

Técnica (retries, logs)

De negocio pura

Dependencias

Ninguna

Frameworks (Ej: NestJS)

Dominio + Repositorios

Testeo

Serialización

Integración

Unitario (dominio)

Ejemplo

{ "sku": "A1", "qty":5 }

Transacciones DB

Validar stock y reservar


4. Ejemplo Completo de Flujo

spinner

5. Errores Comunes y Cómo Evitarlos

5.1 ❌ Command con lógica de negocio

5.2 ✅ Delegar al Use Case

5.3 ❌ Handler haciendo lógica de dominio


6. Preguntas Clave para Definir Límites

  1. ¿Es específico de un framework? → Handler

  2. ¿Involucra transacciones externas? → Handler

  3. ¿Implementa reglas del negocio? → Use Case

  4. ¿Es un dato de entrada? → Command


7. Refactorización de Ejemplo Confuso

Antes (Acoplado):

Después (Separado Claramente):


Conclusión: La diferencia fundamental está en el nivel de abstracción y responsabilidades. Mientras el Command es solo un mensaje, el Use Case encapsula la narrativa de negocio, y el Handler maneja aspectos técnicos.

Última actualización