Solo lees el estado. Pero si vas a Redux DevTools, puedes viajar a través de la historia de estos eventos y ver el estado diferente como punto y cosas así. Bueno, a un alto nivel, Redux tiene la misma idea que event sourcing. Hay algunas diferencias, lo que sea, pero es como, event sourcing no es nada más que básicamente Redux implementado event sourcing en el front end.
Así que queríamos hacer algo similar en nuestra aplicación. Y la definición de event sourcing es que básicamente asegura que todas las aplicaciones cambiadas en todos los eventos se almacenen como una secuencia. Así que en algún momento puedes consultar estos eventos, generar algún tipo de estado actual pero también viajar a través de la historia de estos eventos y ver cuál es el nuevo estado y cosas así. Esta es la solución perfecta para nuestro problema porque puedo almacenar cada evento en nuestra secuencia como un evento. Y si algo cambia, podemos generar el estado nuevamente.
Así que hay otra cosa llamada CQRS, o Command Query Responsibility Segregation, que suena realmente aterrador, pero te mostraré en unos segundos, no es tan aterrador. A menudo va con event sourcing. No necesita ir con él, pero a menudo está conectado. Nuevamente, es una idea antigua, como de 35 años o algo así, más antigua que algunas personas en esta sala, casi más antigua que yo. Comenzó como Command Query Separation, como una idea. La idea era que en lugar de construir una gran aplicación donde tu consulta pueda cambiar el estado de la base de datos, básicamente divides la parte de lectura y la parte de escritura. Siempre que quieras actualizar algo en tu aplicación, simplemente haces esa actualización y no devuelves nada. Siempre que quieras leer los datos que no afectan tu aplicación de ninguna manera, entonces evolucionó a algo llamado Command and Query Responsibility Segregation o CQRS, que básicamente utiliza la misma definición que esta. Y la única diferencia es que básicamente, define dos objetos diferentes, así que tu comando y el estado que estás leyendo no están en la misma forma en absoluto.
Así que tu comando es algo como una acción en Redux. Básicamente, el estado que estás leyendo es como el estado en Redux, no son completamente idénticos. Y funciona de manera muy similar a la cosa en Redux. Así que básicamente, cada vez que quieres enviar algún comando, pasa por algún modelo de comando o reductor que almacena el evento en algún almacenamiento, pero también crea una representación actual de tu estado de aplicación en algún lugar en una base de datos diferente o lo que sea. Luego, cada vez que quieres leer tus datos, simplemente vas a esa tabla de caché o lo que sea y lees esos datos. Por ejemplo, tu cuenta bancaria funciona de la misma manera. Tienes diferentes transacciones y todo lo que te importa es el saldo de tu cuenta en cualquier momento. Realmente no quieres pasar por cada transacción todo el tiempo.
Bueno, una de las cosas importantes sobre CQRS es que debido a su naturaleza y la forma en que funciona, tiene consistencia eventual. ¿Qué significa eso? Cuando envío un comando y leo la cosa del estado inmediatamente, hay una posibilidad de que no tenga el estado más reciente, que algo trabajará con ese nuevo evento en el fondo. Así que CQRS es un patrón de arquitectura poderoso que te ayuda con algunas partes específicas de tu aplicación, pero no es para todo dentro de tu aplicación. Si estás trabajando con, por ejemplo, publicaciones de blog, está bien almacenar la publicación de blog en el fondo como un estado normal en lugar de una serie de eventos, a menos que quieras hacer algo específico como poder ir atrás en la historia y cosas así.
Comments