2010-12-10 10 views
2

Ninjectを使用して、MVCプロジェクトのコントローラにリポジトリを注入しようとしています。コントローラ依存性注入を使用した複数のリポジトリを使用したマスター/ディテールビュー

public class HomeController : Controller 
    { 
     private readonly ICustomerRepository _customerRepository; 
     // 
     // GET: /Home/ 
     public HomeController(ICustomerRepository customerRepository) 
     { 
      _customerRepository = customerRepository; 
     } 
    } 

このすべてが理にかなっていると十分に簡単ですが、ビューはより複雑になると、マスター・ディテール・シナリオを表示する必要があるとき、私は、リポジトリのインターフェイスの両方を注入していますか?それが4または5レベルの深さになると変化しますか? (例:ユーザーが顧客、プロジェクト、グループ、部門を選んで人のリストを取得する)

私が思いついた3つの事柄がありました。

  1. コンストラクタを介して必要なリポジトリをすべて注入します。
  2. スーパーリポジトリのコンセプトを作成するか、
  3. リポジトリごとに部分ビューとコントローラを作成します。

このパターンにはベストプラクティスがありますか?どんな洞察も素晴らしいだろう。

答えて

1

オプション3が最適です - オプション1は、データソースの数が増えるにつれて複雑になるHomeControllerの依存関係の数を増やします。オプション2は、システム内のすべてのクエリをサポートするための多数のメソッドが必要になるため、スーパーリポジトリに同様の問題を引き起こします。

コントローラをいくつかの小さなフォームにそれぞれ作成すると、それぞれのコントローラを非常に単純で簡単に推論できます。

+0

私はこれを見ることができます...しかし、それに直面しましょう、コントローラの2依存関係は "あまりにも多く"ではありません。 –

0

私はコントローラをすべてのコントローラとして考えるようになってきました。あなたがそのアプローチをとるならば、私はそれが複数のリポジトリ/サービスについて知ってもらうためには全く問題ないと思います。

マスタリポジトリのアプローチは、コントローラ側で必要なインスタンス化が少なくて済みますが、実行していることをあまり明示せず、コントローラがリポジトリ/サービスの内部知識にもっと依存するようにします。

関連する問題