No âmbito do Domain-Driven Design (DDD), assinale a afirmati...
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Gabarito: D
Fundamento decisivo: A distinção clássica do DDD entre Entity, definida por identidade e continuidade no tempo, e Value Object, definido pelos valores que carrega sem identidade própria, é o ponto decisivo da questão; por isso, a alternativa D é a correta ao indicar a preferência por Value Objects quando possível.
- Se o conceito do domínio depende de identidade e continuidade no tempo, pense em Entity; se é definido apenas pelos valores que carrega, pense em Value Object.
- Para Value Object, teste igualdade pelos atributos/valores, não por identificador.
- Quando a identidade não for requisito do domínio, a preferência de modelagem em DDD é por Value Objects, por simplicidade de construção, teste e manutenção.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
✅ D) O design deve priorizar o uso de Value Objects em vez de Entities sempre que possível, pois tipos de valor que medem, quantificam ou descrevem coisas são mais fáceis de criar, testar e manter.
Essa afirmação está de acordo com os princípios do Domain-Driven Design (DDD), conforme descritos por Domain-Driven Design: Tackling Complexity in the Heart of Software.
Uma Entity é um objeto cuja principal característica é possuir uma identidade única, independentemente de seus atributos.
Exemplo:
Mesmo que o nome seja alterado para "João Silva", continua sendo o mesmo cliente, pois seu ID permanece o mesmo.
Características:
- possui identidade (ID);
- normalmente é mutável;
- possui ciclo de vida;
- igualdade baseada na identidade.
Um Value Object representa um conceito definido pelos seus atributos, e não por uma identidade.
Exemplos:
- CPF
- Dinheiro
- Endereço
- Intervalo de datas
- Coordenadas geográficas
Características:
- não possui identidade;
- normalmente é imutável;
- igualdade baseada nos valores dos atributos;
- pode ser substituído por outro equivalente.
Exemplo:
Outro objeto com exatamente esses mesmos valores representa o mesmo conceito.
Gabarito: alternativa D
No Domain-Driven Design (DDD), a recomendação é utilizar Value Objects sempre que o conceito do domínio representar uma característica, medida, descrição ou valor que não precise ter identidade própria.
Exemplos comuns de Value Objects:
- Dinheiro;
- Endereço;
- CPF;
- Período;
- Cor;
- Coordenada geográfica;
- Faixa de datas.
Value Objects tendem a ser mais simples de criar, testar e manter porque, em geral:
- Não possuem identificador próprio;
- São comparados pelos valores de seus atributos;
- Devem preferencialmente ser imutáveis;
- Representam conceitos descritivos do domínio;
- Podem ser substituídos por uma nova instância quando houver alteração.
Já as Entities possuem identidade única e são acompanhadas ao longo do tempo, mesmo que seus atributos mudem.
Exemplo: um processo judicial pode ter número único, partes, status e movimentações. Mesmo que seu status seja alterado, continua sendo o mesmo processo, identificado pelo seu número.
Análise das alternativas:
A) Incorreta. Essa descrição corresponde a uma Entity, pois menciona identidade única e mudanças de estado ao longo do tempo.
B) Incorreta. Value Objects devem ser preferencialmente imutáveis, e não mutáveis. Caso seja necessário alterar um valor, normalmente cria-se uma nova instância.
C) Incorreta. Value Objects não são comparados por identificadores. Sua igualdade é determinada pelos valores de seus atributos.
D) Correta. Sempre que possível, conceitos que medem, quantificam ou descrevem algo devem ser modelados como Value Objects, pois isso reduz complexidade e melhora a testabilidade e a manutenção.
E) Incorreta. Value Objects devem evitar efeitos colaterais e, em geral, não devem modificar seu próprio estado nem o estado de outras Entities.
Portanto, a resposta correta é:
D) O design deve priorizar o uso de Value Objects em vez de Entities sempre que possível, pois tipos de valor que medem, quantificam ou descrevem coisas são mais fáceis de criar, testar e manter.
Fonte: ChatGPT
No Domain-Driven Design (DDD), a modelagem distingue Entities de Value Objects conforme a importância da identidade no domínio.
Uma Entity é um objeto cuja identidade permanece constante ao longo do tempo. Seus atributos podem mudar, mas ela continua sendo a mesma entidade porque sua identidade a diferencia das demais.
Um Value Object, por outro lado, representa uma descrição, medida ou característica do domínio. Seu significado está inteiramente em seus atributos, não em uma identidade própria. Por isso, dois Value Objects com os mesmos valores são considerados iguais.
Essa diferença determina como ocorre a comparação entre os objetos. Entities são comparadas por identidade; Value Objects, pelos valores de seus atributos. Assim, adicionar um identificador a um Value Object descaracteriza seu propósito no modelo.
Outra característica essencial dos Value Objects é a imutabilidade. Após sua criação, seu estado não deve ser alterado. Quando um valor precisa mudar, cria-se uma nova instância. Essa abordagem reduz efeitos colaterais, facilita o compartilhamento de objetos e simplifica a manutenção do sistema.
Embora sejam imutáveis, Value Objects podem possuir comportamento. Seus métodos devem apenas operar sobre os valores que representam, retornando novos objetos quando necessário, sem modificar o próprio objeto nem outras Entities.
Como não possuem identidade nem ciclo de vida próprio, Value Objects devem ser preferidos sempre que o domínio permitir. Eles tornam o modelo mais simples, reduzem a complexidade de persistência e facilitam testes, manutenção e reutilização. Entretanto, quando o domínio exige acompanhar a continuidade de um objeto ao longo do tempo ou distinguir indivíduos mesmo com atributos iguais, a modelagem deve utilizar Entities.
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo