web-dev-qa-db-ja.com

クリーンなアーキテクチャとリポジトリパターン

私は新しいプロジェクトで作業していて、リポジトリパターンでクリーンアーキテクチャアプローチを使用しようとしています。私は.netコア3、C#、Automapper、MediatR、Dapperを使用しています。

私はこれらのレイヤーを持っています:

ドメイン(中央、すべての中核):ここに、ビジネスエンティティ、アグリゲーション、および値オブジェクトと、それらの検証ルールおよび例外があります。

アプリケーション(ドメイン周辺):ここではCQRSパターンを使用しており、コマンド、クエリ、インターフェイスを持っています。

持続性:ここに、リポジトリー・インターフェースの実装があります。

リポジトリがデータベース内の1つのテーブルに関連するすべてのCRUD操作の責任を負うべきだと私は言いました。このため、AGGREGATION ENTITYであるENTITYのリポジトリを実装する方法を知りたいです。異なるテーブルからデータを抽出するAGGREGATION REPOSITORYを作成する必要がありますか?または、各テーブルのリポジトリと、複数のリポジトリを使用してAGGREGATIONを作成するサービスが必要ですか?

ありがとう

2

優れたリポジトリは、基盤となるデータベース構造を抽象化する必要があります。エンティティのデータはいくつかの異なるテーブルに格納されている場合がありますが、ドメインロジックはそれを気にする必要はありません。多くても、ドメイン内のエンティティごとに1つのリポジトリがありますが、集約ルートごとに1つのリポジトリを持つこともできます。あなたのケースにとって何が理にかなっているのかを決めるのはあなた次第です。

たとえば、ドメインにOrderエンティティとOrderLineItemエンティティが含まれているとします。ドメインで、対応するOrderなしでOrderLineItemを直接取得することは理にかなっていますか?その場合、両方のエンティティのリポジトリが必要になることがあります。ただし、OrderエンティティからOrderLineItemエンティティにのみアクセスする場合は、Ordersのリポジトリのみが必要です。このリポジトリは、ordersテーブルとorder line itemsテーブルの両方にクエリを実行して、そのすべてのOrderLineItemsで完全なOrderを構築する可能性があります。

4
Sean