モデルクラスのコンストラクターには、サービスごとに1つずつ、約20の異なるパラメーターがありますか? これは正常なのか、それとも何かがおかしいという兆候なのか.
4 に答える
断固として、コントローラーがあまりにも多くのサービスとやり取りしていると思います。私はあなたのコードを見たことがないので、仮定を外しますが、あなたのコントローラーは、ビジネスロジックを構成する少数の「大きな」サービスを利用するのではなく、多数の「小さな」サービスを呼び出すことによってビジネスロジックを構成しているようです小さなサービスから。
「オーケストレーション サービス」対「エンティティ」または「機能」サービスに関する情報を調べてみると、私の言いたいことがわかるでしょう。コントローラに必要なロジックを提供するオーケストレーション サービスを作成すると、コントローラにはビジネス ロジックがまったく含まれないため、アーキテクチャが改善されます。
ここでは、消費するサービスの数が問題だと思います。IoC コンテナーは、型をインジェクション パラメーターにバインドする方法などを解決するために何らかの方法を使用する可能性がありますが、この時点での問題はアーキテクチャにあると思います。
私はあなたの設定を知りませんが。20は少し多いようですが、SRP(単一責任原則)に反対していると思います。しかし、私はあなたのコードを見ることができないので、それを知ることは不可能です。その1つのモデルクラスでこれらすべてのサービスが本当に必要な場合は、それらをファクトリクラスに配置し、それをパラメータとして使用する必要があります。
私たちはあなたのドメインを知らないので、これについて良い答えを出すのは難しいです。
一部のサービスを統合するか、コントローラービューのパーツをより小さなスコープのコンポーネントにリファクタリングすることを検討してください。また、Springのような依存性注入スタイルのフレームワークは、このようなことを支援することができます。
@Mattが言ったように、依存性注入はここであなたを助けることができ、sprint.NETは良いものであり、他にもいくつかあります。
特にMVPについて言及しているので、少なくとも、MicrosoftがDIを採用しているUnityを搭載したEntLib4.1を確認する必要があります。彼らのcodeplexサイトは、これが新しい場合はおそらく開始するのに適した場所です。
Visual Studioと統合し、リンクまたはWebサービスとしてWebサイトのMVPを作成するためのツールを提供するソフトウェアファクトリーもあります。これらもパターンと実践から来ています。