none
Duda con Agregados (DDD) RRS feed

  • Question

  • Saludos

    Estoy tratando de entender como funcionan los agregados en utilizando desarrollo orientado al dominio, el tema es que en el proyecto que estoy trabajando tengo la entidad animal la cual sería el aggregate root para acceder a los diferentes value objects y entidades que tienen relación como por ejemplo la raza, los padres, información de nacimiento, etc. Ahora, tengo entendido que mediante el aggregate root yo obtengo los datos y los modifico, sin embargo cuando me pongo a pensar que esta entidad tiene un criador y a su vez el criador es otro aggregate root ya que tiene otros datos relacionados a el, mi consulta es si es posible que se dé este tipo de relaciones en donde un aggregate root puede utilizar otro aggregate root o como se podría hacer en ese caso.

    Gracias

    Wednesday, July 29, 2020 10:26 PM

Answers

  • hola

    >>Lo que no entiendo es como hacer esta relación si no puedo acceder al criador desde el aggregate animal.

    pero animal es un agregate o es solo una entidad independiente?

    un agregate podria ser el criadero, o similar, que trabaje con las entidades de animal y criador

    El tema es que aqui depende de como se modele el negocio, puede existir un animal sin un criador? quizas los animales se crean solo cuando se asignan al criador en ese caso si el criador seria el agregate para animales, entonces podrias exponer funcionalidad que sea AsignarAnimal() y pasas la entidad

    >>Debería mi clase Animal tener una relación CriadorId en lugar de una propiedad de tipo Criador ?

    Pero esto que planteas se relaciona con el mapping de las entidades, no con modelado DDD, es mas bien una pregunta relacionada con Entity Framework

    Si por supuesto que necesitas esa propiedad para poder relacionar las entidades

    >>Debería hacer un servicio que interactue entre los repositorios ?

    Si es solo para asignar la relacion no hace falta, es solo poner el indentificador de una entidad (o su instancia) en una propiedad de otro entidad y lo envias a persistir si usas EF esto es automatico

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marked as answer by Erick Salazar Thursday, July 30, 2020 8:47 PM
    Thursday, July 30, 2020 6:33 PM

All replies

  • Hola Erick Salazar,

    La respuesta a tu pregunta sobre si un aggregate root puede hacer referencia a otro aggregate root es, a veces sí y a veces no, depende del contexto. Te dejo este enlace en el que le dan a una persona con una duda muy similar a la tuya una respuesta bastante completa. Espero que te sea de ayuda y quedo pendiente de cualquier actualización. Gracias por levantar tu consulta en los foros de msdn.

     

    Saludos cordiales

    Gabriel Castro

     ____________________________ 

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    Thursday, July 30, 2020 12:55 AM
  • hola

    El agregate engloba la funcionalidad de entidades que pueden trabajar en conjunto

    El patrón Agregado (Aggregate)

    estas seguro que un criador es un agregate root ? que otras entidades dependen de este criador y se asocian de forma fuerte que no necesiten existir de form independiente?

    un animal de por si puede existir sin un criador, o no?

    la raza, los padres, info nacimiento son atributos de una entidad, eso no tiene nada que ver con agregate

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    Thursday, July 30, 2020 3:51 AM
  • Hola Leandro, me parece que estás entendiendo mi problema muy bien, a lo que tengo entendido mediante el aggregate root yo puedo modificar la información de todos los componentes de este agregado para despues persistirlo, por lo tanto el criador no formaría parte del aggregate del animal ya que primero debe existir un criador para asignarlo al animal. Lo que no entiendo es como hacer esta relación si no puedo acceder al criador desde el aggregate animal.

    Debería mi clase Animal tener una relación CriadorId en lugar de una propiedad de tipo Criador ? Debería hacer un servicio que interactue entre los repositorios ? Como lo harías tu ?

    Muchas gracias por tu ayuda



    Thursday, July 30, 2020 5:48 PM
  • hola

    >>Lo que no entiendo es como hacer esta relación si no puedo acceder al criador desde el aggregate animal.

    pero animal es un agregate o es solo una entidad independiente?

    un agregate podria ser el criadero, o similar, que trabaje con las entidades de animal y criador

    El tema es que aqui depende de como se modele el negocio, puede existir un animal sin un criador? quizas los animales se crean solo cuando se asignan al criador en ese caso si el criador seria el agregate para animales, entonces podrias exponer funcionalidad que sea AsignarAnimal() y pasas la entidad

    >>Debería mi clase Animal tener una relación CriadorId en lugar de una propiedad de tipo Criador ?

    Pero esto que planteas se relaciona con el mapping de las entidades, no con modelado DDD, es mas bien una pregunta relacionada con Entity Framework

    Si por supuesto que necesitas esa propiedad para poder relacionar las entidades

    >>Debería hacer un servicio que interactue entre los repositorios ?

    Si es solo para asignar la relacion no hace falta, es solo poner el indentificador de una entidad (o su instancia) en una propiedad de otro entidad y lo envias a persistir si usas EF esto es automatico

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marked as answer by Erick Salazar Thursday, July 30, 2020 8:47 PM
    Thursday, July 30, 2020 6:33 PM