Pregunta

Obtengo el concepto general de CQRS, pero tengo algunas preguntas cuando se trata de ir más allá del código de ejemplo y las cubiertas de deslizamiento que están disponibles para lidiar con problemas del mundo real.

  1. Validación

    Cuando necesita hacer la validación de un comando que implique verificar los valores de la base de datos, ¿qué hace? Tome el registro para un servicio, debo ingresar una dirección de correo electrónico única. Un argumento que he escuchado es que es muy poco probable que el usuario ingrese una dirección de correo electrónico duplicada, así que solo manejelo al procesar el comando y enviarles un correo electrónico diciendo "lo siento", o tal vez sugiriendo que restablezcan su contraseña. Por lo tanto, este proceso evita tener un readmodelo en aras de la validación. Pero, ¿cómo se trata con el caso duplicado en el controlador de comandos? ¿Cómo sabes entonces que es un duplicado? ¿Verifique un ReadModel? También podría haberlo usado en primer lugar para una mejor usabilidad.

  2. Cambios en la funcionalidad/corrección de errores

    ¿Qué sucede cuando necesitas cambiar la forma en que funciona un comando, o solucionar un error? En la filosofía de solo appencia, ¿qué hago con todos los antiguos comandos y manejadores de comandos? No puedo cambiarme el nombre de _legacy y esconderlos, de lo contrario, mi deserialización del evento no funcionará. ¿Qué soluciones elegantes hay para lidiar con esto?

Gracias

¿Fue útil?

Solución

  1. Ver http://codebetter.com/blogs/gregyoung/archive/2010/08/12/eventual-consistency-and-set-validation.aspx y la lista de correo de CQRS para las diversas discusiones sobre este mismo tema.
  2. El versioning de eventos (no hay necesidad de versiones de comandos en el mismo sentido que el versiones de eventos) también se discute en la lista de correo CQRS. Los eventos se reproducen para llegar al estado actual de un agregado, no a los comandos. De esta manera, su funcionalidad puede evolucionar. No hay forma de cambiar el pasado, pero hay formas de cambiar el presente/futuro. En el caso impar, debe comenzar a rastrear el estado de una manera diferente, proporcionar un comando explícito. Para nuevas propiedades en eventos, solo proporcione los valores predeterminados como lo haría para una nueva columna de base de datos. Si esos nuevos valores se basan en el estado ya presente, entonces modele un comando explícito para precalcularlos. La ventaja es que puede hacer esto asincrónicamente, mientras que una actualización de la base de datos también lo obliga a cambiar el código. Cómo funcionaría eso se pregunta mejor en la lista de correo CQRS.Una advertencia! No tome el abastecimiento de eventos demasiado a la ligera. Puedes sobrevivir solo con CQRS. Veo personas que cambian a CQRS+ES cuando la mayoría de las veces CQRS lo harán.

Así que ven a grupos.google.com/group/dddcqrs y obtenga ayuda. Otro recurso útil es cqrsinfo.com

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top