Pergunta

Temos um modelo de domínio simples:Contato, TelefoneNumber e ContactRepository.Contato é entidade, possui um campo de identidade.PhoneNumber é um objeto de valor típico:não possui nenhuma identidade e não pode ser carregado separadamente da instância Contact.

Do outro lado temos uma aplicação web para manipulação de contatos.A primeira página é "ContactList", a próxima página é "Contact/C0001" que mostra os detalhes do contato e a lista de números de telefone.

Temos que implementar o formulário de edição de números de telefone.A primeira aproximação pensada é adicionar alguma página que seja navegável como 'ThelephoneNumber/T0001'.

Mas ThelephoneNumber é uma classe Value Object e sua instância não pôde ser identificada desta forma.

Qual é a melhor prática para resolver esse problema?Como podemos identificar objetos não identificáveis ​​nas aplicações sem estado?

Foi útil?

Solução

O estado dos objetos de valor identifica essa instância específica?Caso contrário, você pode simplesmente devolver o valor antigo e o novo valor quando o formulário de edição for enviado e, em seguida, atualizar quaisquer objetos com o estado antigo para o novo estado.

Prefiro ter uma página como Contact/C0001/ThelephoneNumber e usar o ID do contato e a classe de objetos de valor para identificar a instância que você deseja alterar.

A menos que eu tenha entendido completamente mal o que você está perguntando.

Outras dicas

Eu faria o TelephoneNumber conter apenas um monte de números (talvez no plural) e me referiria a ele desta forma:Contato/C0001/Telefone(s)

Na prática acho sempre mais fácil atribuir uma identidade ao número de telefone, mesmo que não seja estritamente necessário em termos de design.

Se for um objeto de valor estrito que não pode existir fora do contexto do Contato, isso indica que uma boa interface de usuário pode solicitar que o número de telefone seja editado na página de contato, e não em sua própria página.

No entanto, acho que a solução de Marc Gear é boa se você decidir contra qualquer uma dessas duas abordagens.

Apesar do que muitas pessoas gostariam que você acreditasse, você não pode ser 100% puro.

Seus objetos de valor precisam de algum tipo de campo Identidade.Às vezes será algo único para um objeto, como um número de telefone, às vezes terá que ser algo artificial, como TelephoneNumber.Id.

Quanto mais cedo você aceitar isso, melhor para você :-)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top