2

私は、サービスを呼び出してデータを取得するために必要な、いくつかのプライベート読み取り専用インターフェイス プロパティを含むコントローラーを持っています。このプロパティは、モデルなどにデータを入力するために使用されます。

private readonly ISomeInterface _someObject;

Controllers コンストラクターで設定されます。

public ... (ISomeInterface someInterface, ...) {
...
_someObject = someObject
}

_someObjectその後、データを取得するためにサービス層への呼び出しで使用されます。

コントローラーに別のプロパティを追加する必要がありましたが、ソリューションをビルドすると、次のエラーが発生します。

CA1506 : Microsoft.Maintainability : 'ControllerName' is coupled with 87 different types from 30 different namespaces. Rewrite or refactor this class's methods to decrease its class coupling, or consider moving some of the class's methods to some of the other types it is tightly coupled with.

クラスの結合を減らすように求められます。これを行う1つの方法は、インターフェース(抽象化)に対してコーディングすることであることを理解しています-インターフェースプロパティを追加することですでに行っていますか?もう 1 つのプロパティを追加することで、このエラーにフラグを立てるためのしきい値を超えているようです。

削除すると、必要なデータを取得できませんか? 何を変更する必要がありますか?

4

1 に答える 1

1

コントローラーにはいくつのアクションがありますか? 各アクションのビュー モデルはありますか? 各アクションの入力モデルはありますか? コントローラー アクションごとに異なるクラスと対話していますか? コントローラーを複数のコントローラーに分割して、変更の理由を減らし、依存関係を減らす必要がある場合があります。インターフェイスを使用すると、ISomeInterface の特定の実装からコントローラーが分離されますが、その警告に関しては何もしません。インターフェイスを使用するように変更しても、型の数は減りませんでした...具体的な型からインターフェイス型に変更されただけです。

問題は、多くのことを行う 1 つのクラスを持つことに対する警告です。多くの依存関係があるということは、クラスがやりすぎていることを示しており、分割する必要があります。たとえば、このコントローラーに「パイを焼く」「パイを食べる」「アイスクリームを作る」「食べ物を届ける」というアクションがある場合、「食べ物を届ける」を新しいクラスに移動できます...同様にアイスクリームを作ってから、Bake Pie と Eat Pie を同じクラスにまとめるか、別々のクラスにするかを評価します。パイの議論は、人々が議論するワームの缶を開きます。

参照: SOLID (オブジェクト指向設計)

ビュー モデルを作成するために別のクラスを呼び出す 2 つ以上の異なるデータ アクセス クラスを呼び出す必要があるコードはありますか。その操作全体を新しいクラスに移動して、3 つのクラスへの依存を 1 に減らすことができます。

于 2012-10-26T12:02:02.623 に答える