我有一个控制器,它包含一些私有只读接口属性,它需要通过调用服务获取数据,然后用于填充模型等
private readonly ISomeInterface _someObject;
在Controllers构造函数中设置了哪个:
public ... (ISomeInterface someInterface, ...) {
...
_someObject = someObject
}
然后在调用服务层时使用 _someObject
来获取数据。
我必须向控制器添加另一个属性,但现在当我构建soloution时,我收到以下错误:
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.
它要求我减少类的耦合,我知道这样做的一种方法是对接口(抽象)进行编码 - 我已经通过添加接口属性来做了什么?似乎通过添加一个属性,它超过了标记此错误的阈值。
如果删除它,我无法获取所需的数据?我需要修改什么?
答案 0 :(得分:1)
您的控制器有多少个动作?你有每个动作的视图模型吗?你有每个动作的输入模型吗?您是否针对每个控制器操作与不同的类进行交互?您可能需要将控制器拆分为多个控制器,以使其更少,从而减少更改的原因,减少依赖性。虽然使用接口会将控制器与ISomeInterface的特定实现分离,但它不会对该警告做任何事情。更改为使用接口并没有减少类型的数量......它只是从具体类型更改为接口类型。
问题在于警告不要让一个班级做很多事情。有许多依赖关系表明课程做得太多,应该分开。例如,如果这个控制器说“Bake Pie”和“Eat Pie”,“Make Ice Cream”和“Deliver food”,你可以将“送食物”转移到一个全新的班级......你可以打破制作冰淇淋然后你会评估Bake Pie和Eat Pie是否应该在同一个班级中保持在一起或者分成不同的课程。馅饼辩论打开了一堆人们会辩论的蠕虫。
请参阅:SOLID (object-oriented design)
您是否拥有必须调用2个或更多不同数据访问类的代码,然后调用另一个类来创建视图模型。您可以将整个操作移动到新类,从而将对3个类的依赖性降低到1。