私は疑問に思いますなぜリポジトリが集約のために使用されていると常に記述されているのか。すべてのエンティティに同じように動機づけられているのではないでしょうか?
アグリゲートは、アプリケーション層に公開される整合性境界です。
つまり、リポジトリはデータストアから状態のスナップショットを取得し、そこから集約を構成するエンティティと値のグラフを作成する責任があります。
リポジトリのAPIは、一貫性境界を定義するため、集約ルートのみを公開します。アプリケーションをグラフ内の任意の場所に移動させて変更するのではなく、アプリケーションが強制的にルートオブジェクトと通信するように強制します。この制約が満たされているため、すべての変更がビジネス不変条件を満たすことを確実にするために、1か所を調べるだけで済みます。
このように、アプリケーションはモデルのエンティティの種類ごとにリポジトリを開発する必要はありません。なぜなら、アプリケーションはその細かい粒度でモデルと直接対話することができないからです。別の言い方をすれば、集約内のエンティティはプライベートのデータ構造です。クライアントがAPIを過ぎてポインタを直接操作できるリストを実装しないのと同じ理由で、クライアントコードがエンティティを直接操作することは許されません。 cqrsで
、あなたは骨材以外のものに使用されている見る「リポジトリ」を行う- リポジトリは、モデルの状態のキャッシュされたビューをルックアップするためにも使用することができます。そのトリックは、ビューがの変更をサポートしていないということです。エバンスが述べているアプローチでは、各エンティティはすべての役割を果たす単一の表現を持っています。 CQRSでは、エンティティは各ロールで異なる表現を持つことができますが、通常はエンティティの変更をサポートする単一のロールだけです。
最後の文章は正しいです。私は本を読んで、単一のエンティティが子供のいない集約ルートになる可能性があり、リポジトリに格納される可能性のある候補でもあるという結論に達しませんでした。 –
すべて一致します。エンティティにはライフサイクルとそれ自身のアイデンティティがあります。したがって、それを検索して操作することができます。それを見る別の方法は、リポジトリがエンティティを返すことです。そのエンティティは、他のオブジェクトを集約することも、集約することもできません。リポジトリが取得するものについて:私は、青い本に、リポジトリがエンティティおよび/またはARを読み込むことを示す内部カバー上のイメージを持っていると確信しています。 –