FluentNHibernateとLinqtoNHibernateを使用して適切なドメインアーキテクチャをセットアップしようとしています。コントローラーがリポジトリクラスを呼び出しています。リポジトリクラスは、内部でNHibernateに感謝し、データのICollectionを返します。これは、データアクセスを抽象化し、NHibernate機能を「ファインプリント」で維持するため、うまく機能しているようです。
ただし、現在、コントローラーが異なるコンテキストで同じデータ呼び出しを使用する必要がある状況を見つけています。たとえば、私のリポジトリはユーザーのリストを返します。これは、ユーザーのリストを表示したい場合には便利ですが、子クラスを利用して役割などを表示したい場合は、SELECT N+1の問題が発生します。NHibernateでそれを変更して、代わりに結合を使用する方法を知っていますが、私の具体的な質問は、このロジックをどこに置くかです。すべてのGetAllUsers()呼び出しでロールを返す必要はありませんが、一部のロールを返す必要があります。
だからここに私が見る私の3つのオプションがあります:
- マッピングの設定を変更して、ロールがクエリに結合されるようにします。
- GetAllUsers()とGetUsersAndRoles()の2つのリポジトリ呼び出しを作成します。
- IQueryableオブジェクトをリポジトリからコントローラーに返し、NHibernateExpandメソッドを使用します。
これをうまく説明できなかったらごめんなさい。私はちょうどDDDに飛び込んでいますが、この用語の多くはまだ私にとって新しいものです。ありがとう!