Entidades (Entities)

  • Entidades: Representam objetos do mundo real ou conceitos do domínio que possuem uma identidade distinta e são identificados por um ID único (Identity).

    • Comparação por ID: Duas instâncias de uma entidade são consideradas a mesma entidade se possuem o mesmo ID, mesmo que outras propriedades sejam diferentes.
    • Mutabilidade: Entidades geralmente são mutáveis, ou seja, suas propriedades podem mudar ao longo do tempo. Por exemplo, um funcionário pode mudar de endereço, mas continua sendo o mesmo funcionário.
    • Persistência: Em bancos de dados relacionais, as entidades geralmente se mapeiam para tabelas. Contudo, nem sempre essa correspondência é direta ou necessária.
  • Exemplo: Se um funcionário tem duas instâncias com IDs diferentes, mesmo que todas as propriedades sejam iguais, são considerados funcionários diferentes.

Objetos de Valor (Value Objects)

  • Objetos de Valor: São descrições ou partes de uma entidade e não têm identidade própria. Eles são comparados com base em todas as suas propriedades.

    • Imutabilidade: Geralmente, objetos de valor são imutáveis. Se alguma propriedade muda, um novo objeto de valor é criado. Isso ocorre porque mudar qualquer propriedade cria uma nova instância, diferentemente das entidades.
    • Comparação por Propriedades: A comparação de objetos de valor é feita propriedade por propriedade, não por um ID.
    • Exemplo: O endereço de um funcionário é um objeto de valor. Se o número da casa muda, o endereço passa a ser um novo objeto de valor.
  • Implementação em C#:

    • Structs: Em C#, objetos de valor são frequentemente implementados como structs, pois a comparação de structs é feita propriedade por propriedade, simplificando a implementação.
    • Classes: Se implementados como classes, deve-se definir explicitamente o método de comparação, comparando todas as propriedades.

Entidades e Objetos de Valor no Contexto do Bounded Context

  • Entidades como Cola entre Bounded Contexts: Entidades podem ser representadas de forma diferente em diferentes bounded contexts, mas compartilham o mesmo ID, que serve como uma “cola” que conecta essas representações diferentes.
    • Exemplo: Um cliente pode ter diferentes representações no contexto de vendas e no contexto de suporte, mas o ID do cliente será o mesmo em ambos os contextos.

Separação entre Modelos de Domínio e Persistência

  • Problemas com Modelagem Relacional: A estrutura das bases de dados relacionais pode levar a representações de objetos de valor como entidades, adicionando IDs a objetos que não deveriam tê-los, o que pode causar confusão entre o modelo de domínio e o modelo de persistência.
    • Importância da Separação: Manter uma clara separação entre o modelo de domínio (que reflete a lógica de negócio) e o modelo de persistência (que lida com a forma de armazenamento) é crucial para evitar confusões e garantir a integridade do design.

Considerações Finais

  • Adotar DDD: A adoção correta de DDD envolve entender profundamente o domínio e aplicar esses conceitos para resolver a complexidade inerente ao negócio, mantendo o design do software alinhado com as necessidades do domínio.

Entidades e Objeetos de Valor

Agregados