Pregunta

CQRS me ha entrado en el modo de pensar .. Estoy tryinng para iniciar un nuevo proyecto con CQRS ideas. Las principales cosas que me gusta es
1) la separación de consultas y comandos. consultas de nuestro dominio han sido un problema.
2) utilizar el almacenamiento de eventos para Auditoría - no voy a utilizar para Replay - al menos por ahora.

Soy bueno con el lado de consulta y todavía tengo algunas preguntas sobre los acontecimientos de dominio

Si un comando resultados en updation de agregados de múltiples raíces (Ex. Orden y OrderDetail) que tienen la virtud de ellas de ámbito UnitOfWork (transaccional). Ahora cada dominio es responsable de la publicación de eventos cuando se produce un cambio a su estado.

digamos el comando cambia 3 registros OrderDetail. Cada OrderDetail publicará 2 Eventos. Al final tenemos 6 eventos.

a) Si publico los eventos tan pronto como he hecho los cambios en el objeto de dominio (pero no confirmado la transacción) ¿Cómo puedo invertir los eventos que se han publicado (y puede haber sido consumidos por los abonados)

  • Lo que ocurre es para mantener los eventos que se publicarán en una lista 'bajo la misma unidad de ámbito de trabajo' y una vez que el committ de transacción ha sido llamado, almacenar y publicarla. ¿Suena esto algo que uno haría.

b) Si los cambios en OrderDetail requiere que algunos cambios también tienen lugar en la Orden agregado Raíz entonces
    i) ¿Debo basar esos cambios mediante la manipulación de los eventos publicados por OrderDetail agregada? Por ej. digamos dos detalle de la orden se retiraron. Esto hace que Estado de la orden de "preferido" a "no preferido".     ii) ¿Qué pasa si los errores de eventos y hace el estado para no actualización -. Si restos orden preferido y luego éste se envía en 2 días

¿Cómo añadir otra pregunta
c) ¿Son "los acontecimientos de dominio son la fuente de todos los cambios de estado de aplicación" o son "resultado de todos los cambios de estado de la aplicación"

Gracias de antemano,

El Mar

¿Fue útil?

Solución

a) no se debe publicar eventos hasta que se compromete la transacción, un evento reprsent algo que ha sucedido , y de ahí la razón por la que están nombrados en pase tensa (por ejemplo OrderClearedEvent). También en el caso de que usted tiene que "revertir" un evento, usted debe tomar una acción correctiva, es decir, usted no borrar el evento, debe desencadenar un nuevo evento que corrige los efectos del evento que desea revertir

b), parece que se trata más de un problema de cómo se está modelando entidades y comandos que cualquier otra cosa. No puedo pensar en una razón por la OrderDetail sería un AggregateRoot, pero no sé su dominio ...

c) Comandos dará lugar a al menos un evento que se publicó

Espero que esto ayude :) Como Rinat dijo, el grupo de Google es el mejor lugar para hacer preguntas, también echar un vistazo a cqrsinfo.com y el código de ejemplo de github.com/MarkNijhof/Fohjin y github.com/gregoryyoung/ mr

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