この記事を見つけるまで、私はロール固有のリポジトリを知りませんでした:
太陽の下ですべてのメソッドを公開するキャッチオールリポジトリの代わりに、役割ベースのインターフェイスにインターフェイス分離の原則を適用し、1つのクラスに必要なものだけを公開するインターフェイスを定義することもできます。
public interface IProductRepositoryForNewOrder { Product[] FindDiscontinuedProducts(); }
単一のリポジトリ実装はすべての製品リポジトリインターフェイスを実装しますが、必要な単一のメソッドのみが公開され、呼び出し元によって使用されます。
a)2つの違いは、特定のリポジトリではアグリゲートルートごとに1つの特定のコントラクトがあり、ロール固有のリポジトリではアグリゲートルートごとに複数のコントラクトを持つことができます。これらのコントラクトはそれぞれ、アグリゲートで動作する特定の呼び出し元のニーズに合わせて調整されます。根?
b)あなたの意見では、2つのパターンのそれぞれの長所と短所は何ですか?
ありがとうございました
アップデート:
昨日、私はあなたの答えの1つを見つけました。本質的に、役割固有のリポジトリパターンを使用する必要があると主張しています。
「もう1つのオプションは、OrdersSelectorServiceの代わりにラムダを使用することです。ラムダがご使用の言語で使用できない場合は、インターフェースである必要があります。OrderRepositoryを渡すことの利点は、不必要な結合を減らすことを目的としたインターフェース分離の原則に基づいています。 Customerの動作に、OrderRepositoryのすべてのメソッドが必要になる可能性は低く、代わりに特定の関数が必要になるため、明示的にしてください。」
上記の抜粋で、役割固有のリポジトリパターンの使用を推奨しているのはなぜですか。ただし、ここでは、特別な状況でのみ使用することを推奨しているようです。他のトピックの例は特別な状況です(ただし、あなたが自分自身と矛盾していると言っているわけではありません。役割固有のパターンを使用するかどうかに関して、2つの例がどのように異なるかはわかりません) ?