Eu tenho uma entidade chamada Mestre que é composta por um número de entidades Escravo.
Só pode haver um mestre no meu banco de dados e desejo consultar repositórios para obter o escravo para um determinado ID.
Inicialmente, criei um SlaveRepository e o perguntei por ID. Isso parece bom e funciona e outros desenvolvedores podem usar meu repositório.
Depois pensei em raízes agregadas, criei um MasterRepository, retornei o Master e fiz um loop para obter a entidade Slave necessária. O problema que senti aqui é que, quando eu expô-lo a outros desenvolvedores, eles precisam fazer o mesmo; então, acabei tendo um método no MasterRepository chamado GetSlaveByID (id da string) e então pude obter o Slave diretamente (oculta a funcionalidade do loop )
Agora, meu repositório deve retornar um Escravo, mesmo que seja chamado de MasterRepository? E mais importante, qual é o caminho certo a seguir?
Eu estou nos estágios iniciais de tentar aplicar DDD e TDD, então provavelmente há muitas coisas em que preciso pensar antes de decidir qual é a maneira correta, eu acho.
Em geral, dentro do limite agregado, deve haver apenas um repositório. E - como Falcon disse - você pode acabar com dois agregados separados, mestre e escravo.
No entanto, parece que o foco principal da sua pergunta é a recuperação de dados, enquanto no DDD deve ser um comportamento. Os limites agregados são uma conseqüência de restrições impostas pelo comportamento (coisas que mudam juntas e invariantes devem ser impostas); a estrutura interna do agregado é uma conseqüência dessa escolha.
Por exemplo, se você agrupar as coisas corretamente de acordo com a necessidade de mudança, não será necessário chamar um Repositório externo. Na maioria dos casos, os dados necessários para uma operação de negócios no Agregado já devem estar dentro dos limites agregados; a necessidade de acessar agregados diferentes é provavelmente o cheiro de um limite inconsistente.
fonte