Aqui está um pequeno problema
Tenha uma entidade, com um objeto de valor. Não é um problema. Substituo um objeto de valor por um novo e, em seguida, o nhibernate insere o novo valor e torna-o órfão, excluindo-o. Ok, isso é um problema.
Segurado é minha entidade em meu domínio. Ele tem uma coleção de endereços (objetos de valor). Um dos endereços é o MailingAddress. Quando queremos atualizar o endereço de correspondência, digamos que o CEP esteja errado, seguindo a doutrina do Sr. Evans, devemos substituir o objeto antigo por um novo, uma vez que é imutável (um objeto de valor, certo?).
Mas não queremos excluir a linha, porque o PK desse endereço é um FK em uma tabela MailingHistory. Então, seguindo a doutrina do Sr. Evans, estamos praticamente ferrados aqui. A menos que eu faça minhas entidades de endereços, não preciso "substituí-la" e simplesmente atualizar seu membro do CEP, como nos bons e velhos tempos.
O que você me sugeriria neste caso? Do meu ponto de vista, os ValueObjects são úteis apenas quando você deseja encapsular um grupo de colunas da tabela de banco de dados (componente no nhibernate). Tudo o que tem um ID de persistência no banco de dados é melhor para torná-lo uma Entidade (não necessariamente uma raiz agregada) para que você possa atualizar seus membros sem recriar todo o gráfico de objetos, especialmente se esse for um objeto profundamente aninhado.
Você concorda? Evans tem permissão para ter um objeto de valor mutável? Ou um objeto de valor mutável é candidato a uma Entidade?
obrigado