MVCの多くのサービスにより、コントローラーコンストラクターが非常に大きくなります。
質問
iは、サービスごとに1つ、モデルクラスのコンストラクターに約20の異なるパラメーターを持っていますか?これは正常ですか、何かがオフになっていることを示しています。
解決
私は、あなたのコントローラーがあまりにも多くのサービスと相互作用していると断定的に考えています。私はあなたのコードを見ていません-だから仮定を外しています-しかし、あなたのコントローラーは多数の「小さな」を呼び出すことでビジネスロジックを構成しているように思えます。より多くの「より大きな」サービスに頼るのではなく、小規模なサービスからビジネスロジックを構成するサービス。
「オーケストレーションサービス」に関する情報をご覧ください。 vs「エンティティ」または「機能」サービスとあなたは私が意味するものが表示されます。コントローラーに必要なロジックを提供するオーケストレーションサービスを作成すると、コントローラーにはビジネスロジックがまったく含まれないため、アーキテクチャが改善されます。
ここでは、消費するサービスの数が問題だと本当に思っています。 IoCコンテナーは、注入パラメーターなどに型をバインドする方法を解決するために何らかの方法を使用する場合がありますが、問題はこの時点でのアーキテクチャーだと思います。
他のヒント
一部のサービスの統合を試みるか、コントローラービューパーツをより小さなスコープコンポーネントにリファクタリングすることを検討します。また、Springのような依存性注入スタイルフレームワークは、このようなことを支援できます。
設定はわかりませんが。 20は、SRP(単一責任の原則)に反すると思います。しかし、私はあなたのコードを見ることができないので、伝えることは不可能です。その1つのモデルクラスでこれらすべてのサービスが本当に必要な場合は、おそらくそれらをファクトリクラスに入れて、パラメータとして使用する必要があります。
あなたのドメインがわからないため、これについて適切な答えを出すのは困難です。
@Mattが言ったように、依存関係の注入はここで役立つ可能性があり、sprint.NETは良いものであり、他にもいくつかあります。
特にMVPについて言及している場合、少なくとも Ent Lib 4.1 は、MicrosoftがDIを採用した Unity になりました。彼らの codeplex サイトは、おそらくこれが新しい場合に開始するのに適した場所です。
ソフトウェアファクトリもあり、ビジュアルスタジオと統合して、 WebサイトのMVPをリンクまたはWebサービスとして作成するためのツール。これらはパターンと慣習にも由来しています。