2010-10-14 45 views
34

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

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

Sin embargo, vamos a suponer que tenemos la relación familiar entre libro y Autor. 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 pertenecen cada uno en su propio agregado Raíz. Por lo tanto, modelar explícitamente la relación de muchos a muchos entre ellos no es el camino a seguir.

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

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

Respuesta

35

suponiendo que ambos son agregados, copiar todos los datos que necesita autor en el libro agregada al añadir el nuevo libro de modo que cualquier comando posterior tiene suficientes datos de autor para trabajar. Ahora, si el agregado del autor necesita información sobre los libros escritos por el autor, 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.

En pocas palabras, no se almacenan de muchos a muchos porque no se escalan. Tienes que empezar a pensar en ellos (agregados) como enviar mensajes entre ellos. La pregunta más importante es qué debe ser consistente y en qué momento debe ser consistente. ¿Nos importa que el autor no refleje instantáneamente el hecho de que se haya agregado un nuevo libro, del cual él/ella es el autor? ¿Hay alguna invariante 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 orientado al comportamiento. ¿Cuál es el comportamiento del agregado Libro y Autor? Esto le dirá qué datos se requieren y en qué punto se debe modelar.

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

+2

¡Gracias, esa es realmente una excelente respuesta! He leído gran parte de la literatura introductoria de CQRS, pero recién comencé y todavía necesito entrar en la mentalidad :) –

+7

Solo para agregar a la excelente respuesta de Yves, si observas más el comportamiento, entonces es posible que encuentres ese o ambos (o ninguno) del libro y los agregados de autor son en realidad objetos de valor. Una vez que comencé a pensar así, descubrí que muchos objetos que antes consideraba entidades se modelaban mejor como objetos de valor y, por lo tanto, eran mucho más simples. Todo depende del contexto, por supuesto ... – FinnNk

+0

¿Podría renovar el enlace si está disponible? Supongo que es un ejemplo de código de tu descripción. – ibubi

Cuestiones relacionadas