Necesito ayuda para encontrar mi raíz y límite agregados.DDD: Agregue raíces
Tengo 3 entidades: Plan, PlannedRole y PlannedTraining. Cada Plan puede incluir muchos PlannedRoles y PlannedTrainings.
Solución 1: Al principio pensé que Plan es la raíz agregada porque PlannedRole y PlannedTraining no tienen sentido fuera del contexto de un Plan. Siempre están dentro de un plan. Además, tenemos una regla comercial que dice que cada Plan puede tener un máximo de 3 PlannedRoles y 5 PlannedTrainings. Así que pensé al nominar el Plan como la raíz agregada, puedo hacer cumplir esta invariante.
Sin embargo, tenemos una página de búsqueda en la que el usuario busca Planes. Los resultados muestran algunas propiedades del Plan mismo (y ninguno de sus PlannedRoles o PlannedTrainings). Pensé que si tenía que cargar todo el agregado, tendría muchos gastos generales. Hay casi 3000 planes y cada uno puede tener algunos niños. Cargar todos estos objetos juntos y luego ignorar PlannedRoles y PlannedTrainings en la página de búsqueda no tiene sentido para mí.
Solución 2: Me acabo de dar cuenta de que el usuario quiere 2 páginas de búsqueda más en las que pueda buscar funciones planeadas o entrenamientos planificados. Eso me hizo darme cuenta de que están tratando de acceder a estos objetos de forma independiente y "fuera del contexto" de Plan. Entonces pensé que estaba equivocado sobre mi diseño inicial y así es como se me ocurrió esta solución. Entonces, pensé tener 3 agregados aquí, 1 para cada Entidad.
Este enfoque me permite buscar cada Entidad de forma independiente y también resuelve el problema de rendimiento en la solución 1. Sin embargo, utilizando este enfoque no puedo aplicar la invariante que mencioné anteriormente.
También hay otra invariante que establece que un Plan solo se puede cambiar si tiene un determinado estado. Por lo tanto, no debería poder agregar PlannedRoles ni PlannedTrainings a un plan que no esté en ese estado. Nuevamente, no puedo hacer cumplir esta invariante con el segundo enfoque.
Cualquier consejo sería muy apreciado.
Saludos, Mosh
Hola David, Gracias Para tu respuesta. ¡Parece ser una gran idea! Sí, he leído algo similar en algún lugar antes, pero el autor no profundizó en los detalles de esto. Creo que los resultados de la búsqueda se parecen más a un informe y no vale la pena leer todo el Agregado para informar, ya que los datos son de solo lectura. No vamos a hacer ningún cambio, por lo tanto, no se deben aplicar invariantes, por lo tanto, no se requiere agregado. ¡Gran idea! :) ¿Tiene alguna implementación de muestra? ¿O conoces alguna página web que hable más sobre esto? – Mosh
OK, agregué un ejemplo a mi respuesta. ¡Espero que te dé algunas ideas! Me temo que no conozco ningún enlace, ya que se me ocurrió esta implementación después de publicar esa pregunta :) P.S. Si esto le ha ayudado a resolver su problema, no olvide marcar esto como la respuesta: D –
¡Gran implementación! Eres un genio David! Gracias hombre. – Mosh