私は ASP.NET MVC の初心者 (ただし、.NET の経験豊富な開発者) であり、Web アプリケーション インフラストラクチャを適切に設定する方法を学ぼうとしています。リポジトリ パターンは、私が最近対処しているものであり、過去数日間に数十のブログ/記事/回答を読んだ後でも、それを正しい方法で使用する方法がわかりません。私はPro ASP.NET MVC 4 Adam Freemanから学んでおり、この本に基づいたリポジトリ インターフェイスのコードは次のとおりです。
public interface IRepository<T>
{
IQueryable<T> FindAll();
IQueryable<T> Find(Expression<Func<T, bool>> predicate);
void Add(T newEntity);
void Remove(T entity);
T FindById(long id);
}
オンラインでさらに調査した結果、リポジトリから IQueryable を返すことは悪い習慣であると多くの人が考えていることがわかりました。その理由は (ほとんど) 理解できます。しかし、代替手段とは正確には何なのか、答えが見つからないようです。エンティティごとに、基本的に IQueryable ではなく IEnumerable を返す可能性のあるクエリごとに特殊なメソッドを持つカスタム リポジトリを用意するというアイデアについては知っていますが、これは私には正しくないようです (それもエレガントなソリューションではありません)。多くのコードの記述と可能なコードの冗長性など...)。
他の選択肢は何ですか?