Ecco un piccolo problema
Avere un'entità, con un oggetto valore. Non è un problema. Sostituisco un oggetto valore con uno nuovo, quindi nhibernate inserisce il nuovo valore e orfano quello vecchio, quindi lo elimino. Ok, questo è un problema.
L'assicurato è la mia entità nel mio dominio. Ha una raccolta di indirizzi (oggetti valore). Uno degli indirizzi è MailingAddress. Quando vogliamo aggiornare l'indirizzo postale, supponiamo che il codice postale sia errato, seguendo la dottrina di Mr. Evans, dobbiamo sostituire il vecchio oggetto con uno nuovo poiché è immutabile (un oggetto valore giusto?).
Ma non vogliamo cancellare la riga, perché il PK di quell'indirizzo è un FK in una tabella MailingHistory. Quindi, seguendo la dottrina del signor Evans, siamo praticamente fregati qui. A meno che non crei i miei indirizzi Entities, quindi non devo "sostituirli" e semplicemente aggiornare il suo codice postale, come ai vecchi tempi.
Cosa mi suggeriresti in questo caso? Per come la vedo io, ValueObjects sono utili solo quando si desidera incapsulare un gruppo di colonne della tabella del database (componente in nibernazione). Tutto ciò che ha un ID di persistenza nel database, è meglio renderlo un'entità (non necessariamente una radice aggregata) in modo da poter aggiornare i suoi membri senza ricreare l'intero grafico dell'oggetto, specialmente se si tratta di un oggetto annidato in profondità.
Sei d'accordo? Il signor Evans ha permesso di avere un oggetto a valore mutabile? O un oggetto a valore mutabile è un candidato per un'entità?
Grazie