Se uma Entidade se tornar a raiz de um Agregado, a Raiz Agregada usa o ID existente da Entidade raiz ou o AR cria seu próprio ID?
-
09-09-2020 - |
Pergunta
No Domain Driven Design (DDD), uma entidade sempre tem sua própria identidade única.
Na minha leitura sobre DDD tenho visto afirmações e exemplos que parecem misturar os conceitos de "identidade única" entre Entidades e Raízes Agregadas.Dependendo do exemplo, eles podem implicar que:
- Eu só preciso de uma das interfaces abaixo.
ou
- Eu preciso de ambos.
Gostaria de saber qual abordagem é "correta" no que diz respeito ao "tipo Eric Evans DDD".
Por exemplo, digamos que suas Entidades implementem esta interface e retornem um GUID quando este método for chamado:
public interface IEntity
{
object IdThatIsUniqueForThisEntityObject { get; }
}
Você precisa do abaixo também ou não?
public interface IAggregateRoot
{
object IdThatIsUniqueForThisAggregateRootObject { get; }
}
A Raiz Agregada precisa implementar uma interface como a acima para que possa representar seu ter ID exclusivo (IdThatIsUniqueForThisAggregateRootObject) separado e diferente do ID de sua entidade raiz (IdThatIsUniqueForThisEntityObject)?
Ou a raiz agregada deveria apenas usar a entidade raiz (IdThatIsUniqueForThisEntityObject) para representar o ID exclusivo da raiz agregada?
Solução
Você só precisa do EntityId.Não há identidade raiz agregada adicional criada.Uma raiz agregada é uma agregação usada para controlar o acesso e organizar objetos como uma única unidade de trabalho de banco de dados.A agregação não confere nenhum tipo de identidade "nova" ou adicional a um objeto.
Uma entidade sempre tem sua identidade de entidade única e isso deve ser suficiente.Por definição, uma operação que recupera uma entidade que é uma raiz agregada também recupera o agregado ao fazê-lo.Não existe nenhum conceito de entidade que às vezes seja apenas a entidade autônoma e outras vezes a raiz agregada.Portanto, também não há necessidade de um conceito de "Identidade Raiz Agregada".