Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
1
resposta

Um Value Object pode ter mais de um valor?

Oi pessoal! Tudo bem?

Estou com a seguinte dúvida sobre VO. O VO pode ter mais de uma valor, por exemplo. Tem uma entidade Usuário que tem um informações de contato (contactInfo) como endereço. Nesse caso o VO teria os valores logradouro, número, bairro, cep, etc? Ou o contactInfo teria um VO para cada propriedade?

1 resposta
solução!

Oi, Paulo! Tudo bem?

Sim, um Value Object (VO) pode ter mais de um valor. No exemplo que você mencionou, em que uma entidade Usuário possui informações de contato como endereço, é perfeitamente adequado que o VO "ContactInfo" contenha múltiplos valores, como logradouro, número, bairro, CEP, etc.

A ideia principal de um VO é encapsular um conjunto de atributos que, juntos, fazem sentido e são tratados como uma única unidade. No caso do endereço, todos esses atributos juntos representam a informação completa de um endereço, então faz sentido agrupá-los em um único VO.

Por exemplo, você poderia ter algo assim em um VO de endereço:

class Address {
  private readonly street: string;
  private readonly number: string;
  private readonly neighborhood: string;
  private readonly postalCode: string;

  constructor(street: string, number: string, neighborhood: string, postalCode: string) {
    this.street = street;
    this.number = number;
    this.neighborhood = neighborhood;
    this.postalCode = postalCode;
  }

  // Métodos para acessar os valores, comparações, etc.
}

Dessa forma, você centraliza a lógica relacionada ao endereço dentro desse VO, o que facilita a manutenção e garante que qualquer operação ou validação específica do endereço seja feita de forma consistente.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.