Hier ist ein kleines Problem
Haben Sie eine Entität mit einem Wertobjekt. Kein Problem. Ich ersetze ein Wertobjekt durch ein neues, dann füge nhibernate den neuen Wert ein und verwaise den alten und lösche ihn dann. Ok, das ist ein Problem.
Versichert ist mein Unternehmen in meiner Domain. Er hat eine Sammlung von Adressen (Wertobjekten). Eine der Adressen ist die MailingAddress. Wenn wir die Postanschrift aktualisieren möchten, sagen wir, die Postleitzahl war falsch. Nach der Doktrin von Mr. Evans müssen wir das alte Objekt durch ein neues ersetzen, da es unveränderlich ist (ein Wertobjekt, oder?).
Wir möchten die Zeile du jedoch nicht löschen, da die PK dieser Adresse eine FK in einer MailingHistory-Tabelle ist. Nach der Doktrin von Mr. Evans sind wir hier also ziemlich durcheinander. Es sei denn, ich mache meine Adressen zu Entitäten, damit ich sie nicht "ersetzen" und einfach ihre Postleitzahl aktualisieren muss, wie in den alten guten Tagen.
Was würden Sie mir in diesem Fall vorschlagen? So wie ich es sehe, sind ValueObjects nur nützlich, wenn Sie eine Gruppe von Datenbanktabellenspalten (Komponente in nhibernate) kapseln möchten. Alles, was eine Persistenz-ID in der Datenbank enthält, ist besser geeignet, um sie zu einer Entität (nicht unbedingt zu einem aggregierten Stamm) zu machen, damit Sie ihre Mitglieder aktualisieren können, ohne das gesamte Objektdiagramm neu zu erstellen, insbesondere wenn es sich um ein tief verschachteltes Objekt handelt.
Stimmen Sie zu? Darf Mr. Evans ein veränderbares Wertobjekt haben? Oder ist ein veränderbares Wertobjekt ein Kandidat für eine Entität?
Vielen Dank