2

MVC3を使用しています。コード分​​析を実行すると、次のエラーが発生します。

CA1506 : Microsoft.Maintainability : 'MyController' は、25 の異なる名前空間からの 94 の異なる型と結合されています。このクラスのメソッドを書き直すかリファクタリングして、クラス結合を減らすか、クラスのメソッドの一部を、密結合している他の型に移動することを検討してください。95 を超えるクラス結合は保守性が低いことを示し、クラス結合が 95 ~ 80 の場合は保守性が中程度であることを示し、クラス結合が 80 未満である場合は保守性が良好であることを示します。

これはコントローラークラスです。

コントローラーのクラス結合を減らすための最善の解決策を教えてください。

4

3 に答える 3

2

@musefan が述べたように、リファクタリングが必要です。私が取り組んでいるプロジェクトのコントローラーを見たところ、まとまりがなく、リファクタリングが必要な境界線にあると考えられ、約 40 の型に結合されています。

コントローラーとそれがサービスを提供するシステムの領域をもう一度見て、それをより少数のまとまりのあるクラスに分割できるかどうかを確認してください。

編集

Word、PDF、および Excel のエクスポート機能を提供するコントローラーに関連して、これはコントローラーに、Word エクスポート、PDF エクスポート、および Excel エクスポートをまとめる詳細を知っているロジックがあることを意味すると思います。抽象化した 3 つの形式 (ヘッダーとフッター)。

私がこれを正しく理解していれば、ヘッダー、フッター、構造、およびフォーマットに関連するすべてのロジックをインターフェイスの背後にある別のクラスに移動し、さまざまなクラスを参照する代わりにコントローラーにそのインターフェイスを参照させることを検討できるリファクタリングの 1 つです。それらの側面を管理します。これにより、コントローラーからさまざまなクラスへのカップリングがインターフェイスの背後にある新しいドキュメント処理クラスに移動し、おそらく、カップリングされたクラスの数が FxCop が許容できるレベルを下回るレベルに低下します。

于 2012-06-12T15:18:50.700 に答える
1

コントローラーが重すぎるようです。機能を複数のコントローラーに分割する必要があることを必ずしも意味するかどうかはわかりません。むしろ、コントローラーに多くのロジックをロードしたことを意味しているのではないかと思います。人々がこれを避ける傾向にある理由はいくつかありますが、そのうちの少なくとも 1 つは、コントローラーのテストが難しくなるということです。さらに重要なことは、通常は再利用可能なビジネス レイヤーにあるロジックが、コントローラー レイヤーに流れ込んでいるというサインであることが多いということです。コントローラーが mvc 固有であることを考えると、ビジネス レイヤーを、プレゼンテーション レイヤーに依存しないレイヤーに結合することになります。

したがって、コントローラーを注意深く見て、戦略的にリファクタリングできるかどうかを確認することをお勧めします。ビジネス ロジックを新しいビジネス ロジック レイヤー (サービス レイヤー) に移動すると、この問題は自然に解決されると思います。

于 2012-06-12T18:10:49.210 に答える
0

ジミー・ボガードがこのビデオで説明しているように、コントローラーをダイエットする必要があります:http ://www.viddler.com/v/b568679c

25の異なる名前空間からの94の異なるタイプとの結合を持つことは、絶対に悪夢のようです。あなたのコントローラーがどのように見えるか想像さえできません。

注意:クラスを追加し、責任をクラスに分割するのは安価です。すべてのコードを単一のクラスに入れることは、メンテナンスの悪夢です。最初は安っぽく見えるかもしれませんが、信じてください、すぐに地獄のようになります。

于 2012-06-13T12:29:25.187 に答える