ページ上のデータの読み取り専用リストを生成する必要があり、そのデータが複数の、場合によっては 5 つ以上の異なるリポジトリから自然に取得される場合はどうしますか?
私たちは DDD を使用しており、リポジトリを介してデータベースへのアクセスを強制していますが、DDD に適合しないと思われるシナリオが発生し、使用する最適なパターンを決定しようとしています。
たとえば、ビデオ、フォーラム、ブログなどを含むコミュニティ ベースの Web サイトがあるとします。コメントのリストを含むフォーラム ページがあるとします。これは大雑把ですが、意味があることを願っています。
<table>
<tr><td>User Name (with possible link)</td><td>User's community score.</td><td>User Avatar</td><td>User's E-mail</td><td>User's blog</td><td>User's videos</td></tr>
</table>
<table>
<tr><td>This is a comment.</td></tr>
</table>
したがって、各コメントには、ユーザー名、コミュニティ スコア、アバター、電子メール、ユーザーのブログ、ユーザーのビデオ ページなど、いくつかの異なる部分が含まれます。従来、これらの情報はすべて別々のリポジトリから取得されていました。
その際の問題は効率です。リポジトリは最大化できますが、作成したアグリゲートの周りだけです。複数のリポジトリにあるデータにアクセスする必要がある場合、リポジトリを使用すると読み取りアクセスが非効率になります。
私の解決策は、関連情報を含む UserInformation DTO を作成し、署名付きの UserForumsRepository にメソッドを配置することです。
ILIst<UserInformation> GetUserForumsUserInformationByForumPostID(int forumPostID).
私の同僚の 1 人は、この方法で DTO を使用すると、これまで使用してきた設計パターンが壊れ、より良い方法はフォーラム コメント ID のリストを取得し、それらの ID をさまざまなリポジトリに渡して、結果。
私自身の見解では、リポジトリの主な目的は CRUD の CUD 部分にとって重要なビジネス ロジックをカプセル化することですが、読み取り専用リストは最も理にかなった方法で生成する必要があります。必要に応じて、読み取り専用のリスト メソッドをリポジトリから完全に削除することも理にかなっていると思います (たとえば、複数の異なるタイプのページで使用される共通のウィジェットなど)。
この状況をどのように処理しますか?