ここで少し問題があります
値オブジェクトを持つエンティティーがあります。問題ない。新しい値の値オブジェクトを置き換え、nhibernateが新しい値を挿入し、古い値を孤立させてから削除します。わかりました、それは問題です。
被保険者は私のドメイン内のエンティティです。彼はアドレス(値オブジェクト)のコレクションを持っています。アドレスの1つはMailingAddressです。郵送先住所を更新したい場合、たとえば郵便番号が間違っていたとしましょう。エヴァンス氏の教えに従い、古いオブジェクトは不変なので、新しいオブジェクトに置き換える必要があります(値オブジェクトは正しいですか?)。
ただし、そのアドレスのPKはMailingHistoryテーブルのFKであるため、行を削除したくありません。したがって、エヴァンス氏の教義に従って、私たちはここでかなりねじ込まれています。私がエンティティをアドレス指定しない限り、それを「置き換える」必要はなく、単に古き良き時代のようにその郵便番号のメンバーを更新するだけです。
この場合、私に何を提案しますか?私の見たところ、ValueObjectsは、データベーステーブルの列(nhibernateのコンポーネント)のグループをカプセル化する場合にのみ役立ちます。データベースに永続IDがあるものはすべて、エンティティ(必ずしも集約ルートではない)にすることをお勧めします。これにより、特に深くネストされたオブジェクトの場合は、オブジェクトグラフ全体を再作成せずにメンバーを更新できます。
同意しますか?エバンス氏は可変値オブジェクトを持つことを許可されていますか?または、可変値オブジェクトはエンティティの候補ですか?
ありがとう