2 min. de lectura (aproximado)

Cqrs: qué es y cómo funciona este patrón

(2 min. de lectura) CQRS (Command Query Responsibility Segregation) es un patrón arquitectónico que separa las operaciones de lectura (queries) de las operaciones de escritura (commands) en un sistema, asignándolas a modelos diferentes. Este enfoque mejora la escalabilidad, el rendimiento y la mantenibilidad de aplicaciones, especialmente en sistemas complejos o de alta carga.

Conceptos Clave

  • Command: Operaciones que modifican el estado del sistema (ej. crear, actualizar o eliminar datos, como crear un usuario o actualizar un producto).
  • Query: Operaciones que leen datos sin alterar el estado (como obtener una lista de usuarios o detalles de un producto).
  • Separación: En lugar de usar un solo modelo de datos para lecturas y escrituras (como en CRUD tradicional), CQRS utiliza dos modelos:
    • Modelo de escritura: Optimizado para actualizaciones consistentes, validaciones y lógica de negocio.
    • Modelo de lectura: Optimizado para consultas rápidas, a menudo con vistas desnormalizadas para mayor eficiencia.
  • Objetivo: Dividir responsabilidades para que cada modelo pueda escalar de forma independiente y optimizarse según su propósito.

Ventajas

  1. Escalabilidad: Puedes escalar los sistemas de lectura y escritura por separado (ej. más instancias para lecturas si son más frecuentes).
  2. Rendimiento: El modelo de lectura puede usar estructuras de datos optimizadas (ej. bases de datos NoSQL para consultas rápidas).
  3. Flexibilidad: Permite usar tecnologías diferentes para cada modelo (ej. MySQL para escritura, Elasticsearch para lectura).
  4. Mantenibilidad: La lógica de negocio (en comandos) se separa de las consultas, simplificando el código.

Desventajas

  1. Complejidad: Implementar dos modelos aumenta la complejidad del sistema, especialmente en sincronización de datos.
  2. Consistencia eventual: Las lecturas y escrituras pueden estar en bases de datos separadas, lo que implica que los datos leídos no siempre están actualizados al instante.
  3. Costo de desarrollo: Requiere más esfuerzo inicial para diseñar y mantener los dos modelos.
Ejemplo de CQRS en php