Alternativas a las relaciones de muchos a muchos con CQRS


¿Cómo modelamos las relaciones clásicas de muchos a muchos con CQRS/DDD?

Sé que las implementaciones y soluciones de DDD y CQRS tienden a ser específicas del dominio, por lo que puede ser difícil encontrar una respuesta general a esta pregunta.

Sin embargo, supongamos que tenemos la relación familiar entre Book y Author. Esta es una relación clásica de muchos a muchos.

Para mí, parece más natural que Libro y Autor son dos diferentes Entidades que cada una pertenece a su propia Raíz agregada. Por lo tanto, modelar explícitamente la relación de muchos a muchos entre ellos no es el camino a seguir.

¿Cómo modelamos un AddBookCommand? Queremos poder agregar un libro a nuestra biblioteca, y también afirmar de alguna manera que un Autor escribió este Libro. ¿Cómo modelamos (y persistimos) tal relación?

Ni Libro ni Autor parecen buenos candidatos para Objetos de valor...

Author: Mark Seemann, 2010-10-14

1 answers

Suponiendo que ambos son agregados, copie los datos de autor que necesite en el agregado del libro al agregar el nuevo libro para que cualquier comando posterior tenga suficientes datos de autor para trabajar. Ahora bien, si el agregado del Autor necesita información sobre los libros escritos por el autor, entonces podría "suscribirse" al evento NewBookAdded (técnicamente podría enviar un comando RegisterAsAuthorOfBook al agregado del Autor como resultado del evento NewBookAdded). Supongo que uno podría modelar esto al revés también, pero no soy tan íntimo con el dominio del Autor del libro.

La conclusión es que realmente no almacena muchos a muchos porque no escalan. Tienes que empezar a pensar en ellos (agregados) como el envío de mensajes entre sí. La pregunta más importante es qué tiene que ser coherente y en qué momento tiene que ser coherente. ¿Nos importa que el Autor no refleje instantáneamente el hecho de que se ha agregado un nuevo Libro, del cual es el autor? Ser ¿hay invariantes que el Autor quiera imponer con respecto a los libros que ha escrito (y viceversa)?

Otra cosa es dejar de estar orientado a los datos y más orientado al comportamiento. ¿Cuál es el comportamiento del agregado del Libro y el Autor? Esto indicará qué datos se requieren en qué momento y cómo se deben modelar.

Http://pastie.org/1220582 para una primera puñalada en el agregado del libro.

 36
Author: Yves Reynhout,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-14 12:23:28