読み取り専用のデータベースビューは、リポジトリパターンにどのように適合しますか?

StackOverflow https://stackoverflow.com/questions/7365913

質問

例:データベースには、「customerordersonhold」という名前のSQLビューがあります。このビューは、特定の顧客と注文データフィールドのフィルタリングされたミックスを返します。アプリケーションでこのビューからデータを取得する必要があります。このようなビューへのアクセスは、リポジトリパターンにどのように適合しますか? 「customerordersonholdrepository」を作成しますか?このような読み取り専用ビューは、集計ルートと見なされますか?

役に立ちましたか?

解決

読み取りリポジトリを分離することをお勧めします。できればその名前をFinderまたはReaderに変更することもできます。リポジトリは、読み取り専用データをクエリするためではなくドメインの使用を目的としています。 この記事これ これは、Finder Separated Form Repositoryの使用法を説明しています。

読み取りモデルの書き込みモデルアーキテクチャからの分離もお勧めします CQRSそこの

このアーキテクチャを使用すると、データストレージとイベントソーシングの使用に関しても、読み取りモデルを書き込みモデルから分離できます。

中央のソリューションについては、リポジトリをファインダーから分離するだけでデータベースを分離する複雑さなしに、いくつかのCQRS概念を利用できます。 役職

このタイプのソリューションのサンプルの場合(同じデータベースを使用しますが、Findersフォームリポジトリを分離します)チェック このサンプル

他のヒント

読み取り専用データは、DDDの世界で値オブジェクトと見なされます。

私は通常、既存のリポジトリに値オブジェクトのアクセス方法を、別のリポジトリを作成することが理にかなっているまでに配置します。これは、アドレスフォームで使用される状態の静的リストを返す可能性のある方法に似ています。

IAddressRepository
{
  Address GetAddress(string addressID);

  List<string> GetStates(string country);
}

「customerordersonholdrepository」のような別のリポジトリを持っていることは問題ないと思います。リポジトリのインターフェイスは、オブジェクトが読み取られているという事実を反映しています(保存/add/makepersistentメソッドを定義しないことで)。

から リポジトリの書き方:

...しかし、私が好きな別の戦略があります:複数のリポジトリ。注文の例では、2つのリポジトリを持つことができる理由はありません:AllordersとSurchadorders。 Allordersは、システム内のすべての注文を含むリストを表し、Surchadordordersはそのサブセットを表します。

返されたオブジェクトをaggrgateルートと呼びません。集合体は、一貫性、データ交換、ライフサイクルを対象としています。あなたのオブジェクトにはこれらのどれもありません。また、値オブジェクト(「特性または属性」)として分類できないようです。彼らは単なるスタンドアロンのクラスです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top