Introducción a CQRS
En este documento busca presentar pautas iniciales para adaptar el patrón arquitectónico CQRS.
Fuente principal: https://martinfowler.com/bliki/CQRS.html
¿Qué es un commando?
Un comando, es basicamente un DTO.
¿Que es un command Bus?
Es el protocolo que nos permite comunicar o indicar a nuestro sistema, la llegada de un nuevo commando(implica cambios en el estado del sistema), es decir que dicho comando, se ha publicado en una Cola o en alguna tecnología con Arquitectura PubSub.
¿Que es un command Handler?
Son todas aquellos actores, que les interesa un determinado comando, es decir que están subscritos a un canal(Command Bus), y que solo le interesa las publicaciones de un determinado comando.
Es decir, aquí se encuentra la lógica de negocio necesaria para materializar el Commando y producir dicho el cambio esperado en el sistema. Por ejemplo Registrar un nuevo usuario.
¿Qué es una Query?
Son simplemente las diversas funcionalidades que nos permite consultar o conocer el estado del sistema en términos de un caso de uso. Por ejemplo, saber la información de un usuario, ver su perfil, ver sus publicaciones, etc.
¿Que es un QueryBus?
Es una estrategia similar a CommandBus, solo que un QueryBus surge cuando las consultas tiene un grado de complejidad considerable y que quizás podamos pensar en aplicar una estrategia de responder por la información consultada de forma Async, por ejemplo, pensar en abrir un web sockets, etc.
Un caso real, luce así 😎
Conclusiones
Es importante, adaptar este patrón de arquitectura con responsabilidad, para obtener el valor que realmente ofrece.
Se recomienda que le des un vistazo a Arquitectura Hexagonal, para que sea más sencillo adoptar buenas practicas de arquitecturas limpias, y te aseguro que tu producto quedará de lujo.
No es falso los rumores de la complejidad que conlleva adoptar CQRS, y depende del contexto, para tomar esta decisión… pero si eres visionario y crees en tu proyecto, te aseguro que tu proyecto va ha evolucionar y deberas replantearte cosas que saltaste de este sitio.