1

私のドメインモデルがリポジトリを認識/気にする必要がない場合、.UpdateOrder(...)CRUD-Update をカプセル化する のような動作はどのようにリポジトリと連携しますか? ドメインサービス経由?

さて、私のリポジトリには、私の.UpdateOrder(...). それはいいです。しかし、誰かにリポジトリで Update メソッドを使用してほしくないので、エンティティでの動作を実行してもらいたい (代わりに UpdateOrder() を使用する)。私のドメインモデルが不変条件を満足する方法に似ていることを望みます-それは設計上(プライベートセットプロパティなど)-私のリポジトリはエンティティを「更新」/永続化するための代替方法を公開しません。

これは単にアクセス修飾子の問題であり、Repo パブリックに Update メソッドがないことで解決されます。または、「より良い」答えはありますか?DDD忍者を助けてください。

4

2 に答える 2

3

DDD での厳密なシーケンスは次のようになります。

var entityRepository = MyServiceLocator.Get<IEntityRepository>();
var myEntity = entityRepository.Load(<some criteria>);
myEntity.Change(something);
entityRepository.Save(myEntity);

リポジトリは常に、エンティティ内のすべての変更を検出/保持する責任があります。

(ところで、私はあなたのエンティティが集約ルートであると仮定しています)

于 2010-12-03T14:48:48.290 に答える
2

ドメインモデルに永続性が含まれていない場合、何かを保存する操作は含まれていません。エンティティがドメインモデルからのものである場合、それ自体に永続的なビジネスはありません。

あなたは言う:

それはいいです。しかし、誰かにリポジトリのUpdateメソッドを使用させたくないので、エンティティの動作を実行してもらいたいです。

しかし、それは間違っていると思います。ドメインオブジェクトは、それ自体を印刷したり、画面上に描画したりするよりも、それ自体を永続化する責任がありません。ドメインクラスにUpdateOrderメソッドを含めることはできません。

ここで、(永続性実装レイヤーからの)rawリポジトリーを他のコードに公開したくない場合がありますが、それは単に適切なものでラップすることを意味します。永続性について話す必要のあるコードがあるように思われるので、それがどのレベルの談話で機能する必要があるかを把握し、それに適切なインターフェースを公開します。

于 2010-12-03T14:52:48.547 に答える