Pregunta

¿Cómo podemos modelo clásico relaciones muchos-a-muchos con CQRS / DDD?

Sé que ambas implementaciones y soluciones DDD y CQRS tienden a ser de dominio específico, por lo que puede ser difícil para llegar a una respuesta general a esta pregunta.

Sin embargo, vamos a suponer que tenemos la relación familiar entre libro y Autor . Esta es una clásica relación de muchos a muchos.

Para mí, parece más natural que libro y Autor son dos diferentes Entidades que cada pertenecen en su propio Agregada Raíz . Por lo tanto, el modelado de forma explícita la relación de muchos a muchos entre ellos no es el camino a seguir.

¿Cómo modelar una AddBookCommand? Queremos ser capaces de añadir un libro a nuestra biblioteca, y también de alguna manera de que un estado particular, Autor escribió este libro . ¿Cómo podemos modelar (y persisten) tal relación?

Ni libro ni Autor parecer como buenos candidatos para Valor Objetos ...

¿Fue útil?

Solución

Suponiendo que ambos son agregados, copiar todos los datos que necesita autor en el libro agregada al añadir el nuevo libro de manera que todos los comandos posteriores tienen suficientes datos del autor a trabajar. Ahora bien, si el agregado Autor necesita información acerca de los libros escritos por el autor, entonces podría "suscribirse" al evento NewBookAdded (técnicamente se podría enviar un comando RegisterAsAuthorOfBook al agregado Autor como resultado del evento NewBookAdded). Supongo que se podría modelar esta al revés también, pero no soy tan íntima con el dominio del autor del libro.

El fondo es que no se sabe muy almacenar muchos-a-muchos, ya que no escalan. Usted tiene que comenzar pensando en ellos (agregados) como el envío de mensajes entre sí. La pregunta más importante es lo que hay que ser constante y en qué momento lo hace tiene que ser coherente. ¿Nos importa que el autor no refleja instantáneamente el hecho de un nuevo libro ha sido añadido, de la que ella / él es el autor? ¿Hay que invariantes autor quiere que se cumplan en lo que respecta a los libros que él / ella ha escrito (y viceversa)?

Otra cosa es dejar de ser datos orientados y encerrarse en el comportamiento. ¿Cuál es el comportamiento del agregado libro y el autor? Esto le dirá lo que se requiere de datos y en ese momento y la forma en que debe ser modelado.

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

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