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 ✓.