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.

它要求我减少类的耦合,我知道这样做的一种方法是针对接口(抽象)进行编码 - 我已经通过添加接口属性来做到这一点?似乎通过再添加一个属性,它会超过标记此错误的阈值。

如果我删除它,我无法获得我需要的数据?我需要修改什么?

4

1 回答 1

1

你的控制器有多少个动作?你有每个动作的视图模型吗?你有每个动作的输入模型吗?您是否为每个控制器操作与不同的类进行交互?您可能需要将控制器拆分为多个控制器,以减少它的工作量,从而减少更改的理由并减少依赖项。尽管使用接口会将控制器与 ISomeInterface 的特定实现分离,但就该警告而言,它不会做任何事情。更改为使用接口并没有减少类型的数量……它只是从具体类型更改为接口类型。

问题是警告不要让一个类做很多事情。有许多依赖项表明该类做得太多,应该分开。例如,如果这个控制器对“烤馅饼”、“吃馅饼”、“制作冰淇淋”和“递送食物”说了一个动作,你可以将“递送食物”移动到一个全新的类......你可以打破也可以制作冰淇淋,然后你会评估 Bake Pie 和 Eat Pie 是应该放在同一个班级还是放在不同的班级。馅饼辩论打开了一罐人们会辩论的蠕虫。

参见:SOLID(面向对象设计)

您是否有代码必须调用 2 个或更多不同的数据访问类,然后调用另一个类来创建视图模型。您可以将整个操作移至一个新类,从而将您对 3 个类的依赖减少到 1 个。

于 2012-10-26T12:02:02.623 回答