Tengo una entidad llamada Master que está compuesta por varias entidades Slave.
Solo puede haber un Maestro en mi base de datos y quiero consultar repositorios para obtener el Esclavo para una identificación determinada.
Inicialmente creé un SlaveRepository y lo pregunté por id. Eso parece estar bien y funciona, y otros desarrolladores podrían usar mi repositorio.
Luego pensé en las raíces agregadas y creé un MasterRepository y devolví el Master y luego hice un ciclo para obtener la entidad Slave requerida. El problema que sentí aquí es que una vez que expongo esto a otros desarrolladores tendrían que hacer lo mismo, así que tuve un método en el MasterRepository llamado GetSlaveByID (id de cadena) y luego pude obtener el Slave directamente (oculta la funcionalidad del bucle )
Ahora, ¿debería mi repositorio devolver un Esclavo aunque se llame MasterRepository? Y lo más importante, ¿cuál es el camino correcto?
Estoy en las primeras etapas de tratar de aplicar DDD y TDD, por lo que probablemente hay muchas cosas en las que debo pensar antes de decidir cuál es la forma correcta, supongo.
En general, dentro del límite agregado debe haber solo un repositorio. Y, como dijo Falcon, podría terminar con dos agregados separados, maestro y esclavo.
Sin embargo, parece que el enfoque principal en su pregunta es la recuperación de datos, mientras que en DDD debería ser el comportamiento. Los límites agregados son una consecuencia de las restricciones impuestas por el comportamiento (cosas que cambian juntas e invariantes para que se apliquen), la estructura interna del agregado es una consecuencia de esa elección.
Por ejemplo, si agrupa las cosas correctamente de acuerdo con la necesidad de un cambio, no es necesario llamar a un Repositorio externo. La mayoría de los casos, los datos necesarios para una operación comercial en el Agregado ya deberían estar dentro de los límites agregados, la necesidad de acceder a diferentes agregados es probablemente un olor a límite inconsistente.
fuente