3

集約ルートに関する私の理解が正しければ、ルートはその「子」の 1 つを削除する責任も負う必要があります。それは一見、次のようなものに変換されます。

order.removeOrderLine(23);

これにより、コレクションから効果的に削除されます。しかし、これはどのように持続されますか?私の ORM の UnitOfWork は、そのコレクションで何かが欠落していることを検出し、データベースから削除することになっていますか?

代わりに、RemoveOrderLine を OrderRepository のメソッドにする必要がありますか?

4

1 に答える 1

4

通常は Unit of Work がこれを処理する必要がありますが、それはその実装、特に変更を検出する方法に依存します。一部の作業単位の実装 (Hibernate など) では、集約を変更する前に集約のコピーを保持するため、ビジネス トランザクションの最後 (unitOfWork.PersistAll() などを呼び出すとき) に、すべてのオブジェクトの現在のバージョンと一致させようとします (およびコレクション) を元のバージョンと比較します。

もう 1 つの方法は、何かが変更されたときにエンティティが作業単位に通知するように、ドメイン エンティティを作業単位とさらに結合させることです (つまり、 order.removeOrderLine メソッドが変更について作業単位に通知します)。

UoW 変更検出を実装する方法は複数あります。インスピレーションを得るために、休止状態のいくつかの実装を見てください。

于 2009-11-12T20:40:02.177 に答える