Estou aprendendo DDD e ainda tenho mais perguntas do que respostas.
Vamos considerar um modelo de diretório que contém um número enorme de arquivos.
Aqui está como eu o vejo:
O diretório é uma raiz agregada.
Essa entidade deve ter a lógica de validação para verificar a exclusividade do nome do arquivo quando ele é adicionado ou apenas renomeado. E a entidade File contém a lógica 'SetName', notificando o Diretório via Evento de Domínio sobre alterações de nome.
Mas como o Directory deve funcionar?
Nem sempre é possível carregar todos os arquivos na memória. Nesse caso, o repositório de arquivos deve ter uma lógica adhoc para verificar a exclusividade do nome? Suponho que é uma decisão viável.
No entanto, e se alguns arquivos já tiverem sido adicionados ou renomeados na transação atual ainda não confirmada? (nada proíbe isso. Os limites da transação são definidos externamente em relação à lógica de negócios). Provavelmente, o repositório deve levar em consideração os estados persistentes e na memória (mesclar esses estados pode ser uma tarefa não trivial).
Então, quando a raiz agregada com todos os seus filhos se encaixa na memória - está tudo bem. E assim que você não puder materializar todas as entidades, haverá problemas.
Eu gostaria de saber quais são as abordagens para essas situações. Pode não haver nenhum problema e é apenas por causa do meu mal-entendido sobre o assunto.