Aggregate Roots – O coração da consistência

O Aggregate Root é uma entidade que atua como ponto de entrada para outras entidades. Por exemplo, em um modelo com as entidades Pedido e Itens do Pedido, o acesso aos itens do pedido é feito exclusivamente através da raiz, ou seja, da entidade Pedido.
Toda alteração no modelo deve ser encapsulada no aggregate para preservar a integridade ao longo de todo o seu ciclo de vida.
Outro ponto crucial é que, para manter a consistência, o aggregate deve ser persistido e recuperado integralmente. Isso significa que ao recuperar o aggregate Pedido, seus itens também devem ser carregados.
No entanto, essa abordagem pode acarretar problemas de desempenho se não for modelada corretamente. Então, surge a pergunta: qual é o tamanho ideal de um aggregate?
Quanto menor, melhor!
Em um contexto bancário, podemos considerar o aggregate Conta Corrente, que terá um sub-agregado Transação. Dado que não podemos prever quantas transações uma conta corrente realizará ao longo do tempo, o ideal é dividir esse aggregate em dois: Conta Corrente e Transação.