0

アプリケーションがいくつかのアセンブリに分割されています。

MyProject.Infrastructureアセンブリには、 および などのすべての Domain オブジェクトとPerson、 およびSaleなどのインターフェイス リポジトリが含まれていIPersonRepositoryますISaleRepository

MyProject.Dataアセンブリには、これらのリポジトリの具体的な実装が含まれています。

リポジトリはデータベースからデータを取得し、新しいドメイン クラスをインスタンス化します。たとえばIPersonRepository.GetPersonByNumber(customerNumber)、データ ソースから顧客を読み取り、新しいPersonクラスを作成して入力し、呼び出し元に返します。

Person.UpdateAddress(address). _

このメソッドをPerson仮想メソッドとしてクラスに配置し、必要な機能を提供するためにそれらのメソッドをオーバーライドする派生クラスをデータ層内に作成しても問題ありませんか?

DDD の規則を破らないようにしたいのです。

これらのメソッドをリポジトリに配置するオプションがあることも知っていますIPersonRepository.UpdatePersonAddress(person, address)

4

2 に答える 2

0

UpdatePersonAddress()ほとんどの ORM には、メインのエンティティを永続化するときに関連するエンティティを自動的に永続化する変更トラッカーがあります (マッピング構成で正しい関係を宣言した場合)。そのため、リポジトリでは必要ありません。Person.UpdateAddress(address)永続性について考えずに、オブジェクト レベルでやりたいことを何でも実行してください。ここはそのための場所ではありません。

ただし、必要なのは、実行コンテキスト認識コードで呼び出され、変更を保存する必要があると思われるときに変更を永続ストアにフラッシュするオブジェクトです。たとえば、Entity Framework DbContext を含む Unit of Work である可能性があります。

于 2013-06-13T08:04:20.950 に答える
0

Person.UpdateAddress は、リポジトリではなく、必ずドメインにある必要があります。UpdateAddress はロジックであり、リポジトリ内のロジックを避けるようにしてください。エンティティ フレームワークを使用している場合、「データ クラス」は必要ありません。

于 2013-06-09T13:28:03.647 に答える