私が現在取り組んでいるプロジェクトには、多くの検索/フィルタリングページが必要です。たとえば、データ、カテゴリ、ユニットなどで問題を取得するための複雑な検索ページがあります。
問題ドメインクラスは複雑で、多くの値オブジェクトと子オブジェクトが含まれています。
。UIの検索/フィルタリング/レポートをどのように処理するのか疑問に思っています。私の知る限り、私には3つの選択肢がありますが、どれも私を幸せにするものではありません。
1.)パラメータをRepository / DAOに送信して、DataTableを取得し、DataTableをUIコントロールにバインドします。たとえば、ASP.NETGridViewに送信します。
DataTable dataTable =issueReportRepository.FindBy(specs);
.....
grid.DataSource=dataTable;
grid.DataBind();
このオプションでは、ドメインレイヤーを渡すだけで、指定された仕様のデータベースをクエリできます。そして、完全に構築された複雑なドメインオブジェクトを取得する必要はありません。値オブジェクト、子オブジェクトなどは必要ありません。データベースから直接DataTableのUIに表示するデータを取得し、UIに表示します。
しかし、メソッドの戻り値のようにUIで計算フィールドを表示する必要がある場合は、完全なドメインオブジェクトがないため、データベースでこれを行う必要があります。インテリセンスなどのロジックとDataTableの問題を複製する必要があります...
2.)パラメータをリポジトリ/ DAOに送信してDTOを取得し、DTOをUIコントロールにバインドします。
IList<IssueDTO> issueDTOs =issueReportRepository.FindBy(specs);
....
grid.DataSource=issueDTOs;
grid.DataBind();
このオプションは上記と同じですが、検索ページごとに貧血のDTOオブジェクトを作成する必要があります。また、さまざまな問題検索ページについて、問題オブジェクトのさまざまな部分を表示する必要があります。IssueSearchDTO、CompanyIssueTO、MyIssueDTO...。
3.)パラメータをReal Repositoryクラスに送信して、完全に構築されたドメインオブジェクトを取得します。
IList<Issue> issues =issueRepository.FindBy(specs);
//Bind to grid...
私はドメイン駆動設計とパターンが好きです。このオプションにはDTOまたは複製ロジックはありませんが、このオプションでは、UIに表示されない多数の子オブジェクトと値オブジェクトを作成する必要があります。また、完全なドメインオブジェクトと針の子のパフォーマンスコストを取得するには、ロットのob結合が必要です。オブジェクトと値オブジェクト。
私はORMツールを使用していません。このバージョンでは手動で遅延読み込みを実装できるかもしれませんが、少しやり過ぎのようです。
どちらが好きですか?それとも私は間違っていますか?これを行うための提案やより良い方法はありますか?