DDD: raízes agregadas

Preciso de ajuda para encontrar minha raiz e limite agregados.

Eu tenho 3 entidades: Plan, PlannedRole e PlannedTraining. Cada plano pode incluir muitos papéis e planos planejados.

Solução 1: No começo, pensei que o plano fosse a raiz agregada, porque PlannedRole e PlannedTraining não fazem sentido fora do contexto de um plano. Eles estão sempre dentro de um plano. Além disso, temos uma regra comercial que diz que cada plano pode ter no máximo três funções planejadas e cinco treinamentos planejados. Então, ao nomear o plano como raiz agregada, pensei em impor esse invariante.

No entanto, temos uma página de pesquisa na qual o usuário procura por planos. Os resultados mostram algumas propriedades do próprio plano (e nenhuma de suas funções planejadas ou treinamentos planejados). Eu pensei que se eu tivesse que carregar o agregado inteiro, teria muita sobrecarga. Existem quase 3000 planos e cada um pode ter alguns filhos. Carregar todos esses objetos juntos e depois ignorar PlannedRoles e PlannedTrainings na página de pesquisa não faz sentido para mim.

Solução 2: Acabei de perceber que o usuário deseja mais 2 páginas de pesquisa nas quais pode pesquisar Funções Planejadas ou Treinamentos Planejados. Isso me fez perceber que eles estão tentando acessar esses objetos de forma independente e "fora" do contexto do Plano. Por isso, pensei que estava errado sobre o meu design inicial e foi assim que surgiu esta solução. Então, pensei em ter 3 agregados aqui, 1 para cada Entidade.

Essa abordagem permite pesquisar cada entidade de forma independente e também resolve o problema de desempenho na solução 1. No entanto, usando essa abordagem, não posso impor a invariante mencionada anteriormente.

Há também outra invariante que afirma que um plano pode ser alterado apenas se tiver um determinado status. Portanto, não posso adicionar nenhum PlannedRoles ou PlannedTrainings a um plano que não esteja nesse status. Novamente, não posso impor esse invariante com a segunda abordagem.

Qualquer conselho seria muito apreciado.

Saúde, Mosh

questionAnswers(3)

yourAnswerToTheQuestion