3

したがって、多くの読書の後、複雑なレポート機能は通常のリポジトリに属しておらず、レポートで使用される読み取り専用オブジェクトを返す何らかの専用の「ファインダー」が必要であることに気付きました。

私が不明なのは、「Finder」クラスとそれに関連する ReadModel クラスがプロジェクト内のどこにあるのかということです。具体的な Readmodels と共にインフラストラクチャ アセンブリ内にファインダー用のインターフェイスがあるという点で、ファインダーはリポジトリのようなものですか?

これらのクラスはどこに属しますか?

4

1 に答える 1

3

私は通常、論理クエリ「レイヤー」を持っています。常に独自のアセンブリに分離する必要があるとは限らないため (.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可能であれば単純な型を使用し、 、DataTablenever のようなテクノロジ固有のデータ アクセス オブジェクトを使用していることに気付くでしょうDataSet:) --- ただし、複合データに使用するDataSet ことはできますが、やや面倒です。

私は特定の読み取りモデル (DTO) を最小限に抑えるようにしていますが、複合データを処理するときに必要になる場合があります。

于 2013-06-17T06:45:08.597 に答える