DDD establece que solo debe acceder a las entidades a través de su raíz agregada. Por ejemplo, supongamos que tiene una raíz agregada X que potencialmente tiene un lote de entidades Y de niños. Ahora, para algunas situaciones, solo te importa un subconjunto de estas entidades Y a la vez (quizás las muestres en una lista paginada o lo que sea).¿Se me permite tener agregados "incompletos" en DDD?
¿Está bien implementar un repositorio entonces, para que en tales escenarios devuelva agregado incompleto agregado? Es decir. un objeto X cuya colección Ys solo contiene las instancias Y que nos interesan y no todas de ellas? Esto podría causar, por ejemplo, métodos en X que realicen algunos cálculos que impliquen el Ys para no comportarse como se espera.
¿Es esto quizás una indicación de que la entidad Y en cuestión debe considerarse promovida a una raíz agregada?
Mi idea actual (en C#) es aprovechar la ejecución retrasada de LINQ, de modo que mi objeto X tenga un IQueryable para representar su relación con Y. De esta manera, puedo tener una carga diferida transparente con filtrado ... Pero hacer que esto funcione con un ORM (de Linq a Sql en mi caso) podría ser un poco complicado.
¿Alguna otra idea inteligente?
Podría ser un olor a código, pero también podría ser no. He tenido el mismo problema. Tengo una clase Trace que posee puntos de referencia geográficos. Ahora esta traza puede ser arbitrariamente larga y, aunque la Traza misma es una entidad, los puntos de referencia no lo son. Ellos son objetos de valor. Entonces, si quiero actualizar el Trace en el sentido puro de DDD, tendría que cargar el Trace de raíz agregado completo con todos sus puntos de referencia, agregar algunos waypoints y almacenar el Trace completo nuevamente. Esto, obviamente, no escala para trazas grandes. Por lo tanto, debido a problemas de rendimiento, me veo en la posibilidad de permitir raíces agregadas parcialmente cargadas ... –