私は通常、論理クエリ「レイヤー」を持っています。常に独自のアセンブリに分離する必要があるとは限らないため (.Net/C# の観点から)、論理的です。ドメインは IMHO を照会してはならないため、ドメイン内にあるべきではありません。ドメインは、集計、エンティティ、値オブジェクトなどに関係しています。それ以外に必要なものは、ドメイン オブジェクトに入力する必要があります。クエリのビットは、おそらくアプリケーション サービス エッジでより多くの役割を果たします。
IQuery
最終的には、必要な完全な集計/エンティティと、読み取り側に実装された別のインターフェイスのみを返すリポジトリになります。通常、私はそれをDataAccess
アセンブリに入れています。例えば:
public interface IUserQuery
{
bool ContainsEMail(string emailAddress);
int NumberOfAdminisitrators();
DataRow Profile(Guid id);
DataTable FriendRequests(Guid id);
SomeReadModel ForSomethingThatContainsSayAList(DateTime date);
}
DataRow
可能であれば単純な型を使用し、 、DataTable
、never のようなテクノロジ固有のデータ アクセス オブジェクトを使用していることに気付くでしょうDataSet
:) --- ただし、複合データに使用するDataSet
ことはできますが、やや面倒です。
私は特定の読み取りモデル (DTO) を最小限に抑えるようにしていますが、複合データを処理するときに必要になる場合があります。