私は現在、新しいプロジェクトをセットアップしていますが、少し入力が必要ないくつかのことに遭遇しました。
これは私が考えているものです:
汎用リポジトリが欲しい
リポジトリから IQueryable を返したくありません。
クエリを仕様にカプセル化したいと思います。
仕様パターンを実装しました
簡単にテストできる必要があります
ここで少し行き詰まります。私の質問は、find メソッドを 1 つ以上の仕様で呼び出す最もエレガントな方法はどれかということです。
(流暢):bannerRepository.Find().IsAvailableForFrontend().IsSmallMediaBanner()
または私の仕様でラムダとしてクエリを表現する
(ラムダ):bannerRepository.Find.Where(banner => banner.IsFrontendCampaignBanner && banner.IsSmallMediaBanner)
それともまったく別の方法ですか?最も重要なことは、MVC フロントを実装する担当者がリポジトリを直感的に操作できるようにすることです。
私が達成したいと思っているのは、仕様を組み合わせることができるという点である程度の柔軟性を維持し、仕様で「フィルタリング」する経験を与えることですが、IQueryable をコントローラーにリークすることはありませんが、ISpecifiable のように、 Linqではなく仕様でクエリを変更します。しかし、この方法でクエリ ロジックをコントローラに漏らしただけでしょうか?