2010-10-01 31 views
5

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 diapositivas que están disponibles para tratar problemas del mundo real.Validación y solución de errores en CQRS

  1. Validación

    Cuando tenga que hacer la validación de un comando que involucra valores de comprobación de la base de datos, ¿qué hacer? Tome la inscripción 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, por lo que solo debe manejarlo al procesar el comando y enviarles un correo electrónico que diga "lo siento", o tal vez sugiriendo que restablezcan su contraseña. Por lo tanto, este proceso evita tener un modelo de lectura por el bien de la validación. Pero, ¿cómo manejas la caja duplicada en el controlador de comando? ¿cómo sabes que es un duplicado? verifica un modelo de lectura? bien podría haber usado eso en primer lugar para una mejor usabilidad.

  2. Los cambios en la funcionalidad de los insectos/fijación

    Qué pasa cuando se necesita cambiar la forma en que un comando funciona, o corregir un error? En la filosofía de solo agregar, ¿qué hago con todos los comandos y manejadores de comandos antiguos? No puedo cambiarles el nombre a _legacy y esconderlos; de lo contrario, mi deserialización de eventos no funcionará. ¿Qué soluciones elegantes hay para lidiar con esto?

Gracias

Respuesta

4
  1. Ver http://codebetter.com/blogs/gregyoung/archive/2010/08/12/eventual-consistency-and-set-validation.aspx y los CQRS lista de los diversos debates sobre este tema muy de distribución.
  2. El control de versiones de eventos (no hay necesidad de versiones de comandos en el mismo sentido que el control de versiones de eventos) también se trata en la lista de correo de 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 extraño, debe comenzar a rastrear el estado de una manera diferente, proporcione un comando explícito. Para las nuevas propiedades en eventos, solo proporcione los valores predeterminados como lo haría para una nueva columna de base de datos. Si los nuevos valores se basan en el estado ya presente, modele un comando explícito para precalcularlos. La ventaja es que puede hacer esto de forma asíncrona, mientras que una actualización de la base de datos también lo obliga a cambiar el código. Cómo funciona eso es mejor preguntar en la lista de correo de cqrs. Una advertencia! No tome en el evento de abastecimiento demasiado a la ligera. Puedes vivir con solo CQRS. Veo gente cambiando a CQRS + ES cuando la mayoría de las veces lo hará CQRS.

Acceda a groups.google.com/group/dddcqrs y busque ayuda. Otro recurso útil es cqrsinfo.com

Cuestiones relacionadas