5

ルック:複数のリポジトリとサービスを備えた.NET MVCコントローラ? (私はマネージャーの依存関係への依存性注入を使用しています)私のコントローラで

public RoleController(IRoleRepository roleRepository, ISiteRepository siteRepository, IUserRepository userRepository, IDbContext dbContext) 
{ 
    _roleRepository = roleRepository; 
    _siteRepository = siteRepository; 
    _userRepository = userRepository; 
    _dbContext = dbContext; 
} 

は多くの依存関係を持つクラスを持つことは、コードのにおいですか?右?

しかし、私の例では、UsersSitesRoleに関連付ける必要があります。この関連付けを行うには、これらの依存関係が必要です。

メーリングリストに参加している人の中には、あまりにも多くの依存関係があると、何かが間違っている可能性があるという兆候がありました。しかし、私は他の方法を見ません。私は自分の責任を分けた、そのような状況で何か治療する方法がわからないのですか?何か間違えている?

更新:

DbContextは私のUnitOfWorkであるので、私はリポジトリとDbContextを必要とし、リポジトリが保存されません。

この例は、GRIDを持つビュー内の関連付けのような他の機能を持つ単純なCRUDです。

アップデート2:

私は私のUI層がMVCであるアーキテクチャを使用しています。

+1

通常は、すべてのエンティティではなく、集約ルートのリポジトリのみを作成します。私はあなたのドメインを知らないが、私の腸はリポジトリが多すぎると私に伝えます。さらに、なぜリポジトリとdbcontextが必要ですか?最後に、私は通常、「サービス」で「オーケストレーション」タイプのビジネス活動を行い、サービスにリポジトリなどを扱わせることを好みます。コントローラの依存関係は、サービスのみになります。 – Brook

+0

@Brook更新を参照してください。 –

+1

可能な複製[asp.net-mvcでは、コントローラに複数のリポジトリを注入するためにIOCを使用するよりエレガントな方法はありますか?](http://stackoverflow.com/questions/7311623/in-asp-net-mvc-より高度な方法で、iocからインジェクションへマルチプルリポジトリを使用すること) – Omar

答えて

8

良いDIフレームワーク(つまり、poor man's DIを使用しない)で依存関係を管理すると、それは悪いことではないと思います。このようにして、コントローラはこれらのことがすべて必要になると明示的に言います。 (アプリケーションの他の多くの部分では、これは有効な議論ではないかもしれないことに注意してください。コントローラは、プログラムフローを制御し、指示する場所で特別なので、なぜたくさんのUsersSitesRolesに関わるすべての作業を行い、アプリケーションの一部...)

あなたは本当にこの特定のケースでは、依存関係の数を制限したい場合は、それがMembershipServiceを作成するために意味を作ることができ、 。そうすれば、これらの3つのリポジトリに依存することになり、コントローラはメンバシップサービスにのみ依存することになります。あなたの更新に応じて


:あなたは、「Webリクエストごとに」シングルトンとして作業単位(すなわちデシベルコンテキスト)を登録することができ - これは城ウィンザーと他の多くのDIフレームワークで可能です。次に、リポジトリに依存させることができ、すべての変更を行い、コントローラが保存に依存するようにすることができます。また、DIフレームワークによってコントローラにすべて同じインスタンスが渡されます。

+0

更新を参照してください、問題は、MVCは私のUI層です。私が受け取った議論は次のとおりです。コントローラはユーザーからの要求に応答する責任があり、原則としてお客様のドメインに関連すべきではありません。 –

関連する問題