私は自分が思いついたものを見るために、何か(悪い)を試みている途中かもしれません。手始めに、私たちはDDD方式でアプリケーションを構築しました-私たちの意見です。デザインは「クラシック」DDDです。つまり、集約ルート用のリポジトリがあります。Equals、GetHashCodeなどをオーバーライドするベースエンティティがあります。エンティティは論理的に削除されるだけです。つまり、IsActiveフィールドを使用します。ORMとして、NHibernate>3を使用します。
私が試したいこと:次のような構文で、集約ルート内のリストからエンティティを削除できるようにしたいと思います。
aggregateRoot.Entities.Remove(entity);
永続層では、「entity」のデフォルトのNHibernateの動作(「entity」には「aggregateRoot」への後方参照があります)は、「aggregateRoot」列の「entity」をNULLで更新することです。私たちが実際にやりたいことはこれです:
repository.Delete(entity);
これは、「entity」が「aggregateRoot」のコレクションに残っている間、「entity」を非アクティブとしてマークするだけです。
おそらく私の考えは(もう一度言ったように)単純に愚かですが、NHibernateに「エンティティ」を「aggregateRoot」へのnull参照で更新してはならず、非アクティブにするだけであることを教えたいと思います。なんで?必要な場所でリポジトリを明示的に使用したいからです。
私が求めているのは、これがNHibernateInterceptorsを介して達成可能かどうかです。まだ試していませんので、バックログを優先したいと思います。