我有一个控制器,它包含一些私有的只读接口属性,它需要这些属性,以便通过调用服务来获取数据,然后使用该服务填充模型等
private readonly ISomeInterface _someObject;在控制器构造函数中设置:
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.它要求我减少类的耦合,我知道这样做的一种方法是针对接口(抽象)进行编码-我已经在通过添加接口属性来做到这一点了?似乎通过再添加一个属性,就可以使其超过标记此错误的阈值。
如果我删除它,我不能得到我需要的数据?我需要修改什么?
发布于 2012-10-26 20:02:03
你的控制器有多少个动作?您是否有每个操作的视图模型?你对每个动作都有一个输入模型吗?对于每个控制器操作,您是否与不同的类进行交互?您可能需要将您的控制器拆分为多个控制器,以使其执行的操作更少,从而减少更改的原因,并减少依赖项。尽管使用接口可以将控制器从ISomeInterface的特定实现中解耦,但它不会对该警告做任何事情。更改为使用接口并不会减少类型的数量...它只是从具体类型更改为接口类型。
问题是警告不要让一个类做很多事情。有许多依赖项表明这个类做了太多的事情,应该被分成两部分。例如,如果这个控制器有一个"Bake Pie“、"Eat Pie”、"Make Ice Cream“和"Deliver”的动作,你可以将"deliver food“移到一个全新的类中……你也可以打开Make Ice Cream,然后你可以评估Bake Pie和Eat Pie是应该在同一个类中,还是应该放在不同的类中。关于馅饼的争论引发了人们的争论。
请参阅:SOLID (object-oriented design)
您是否有代码必须调用2个或更多不同的数据访问类,然后调用另一个类来创建视图模型。你可以将整个操作移到一个新的类中,从而将你对3个类的依赖减少到1个。
https://stackoverflow.com/questions/13086276
复制相似问题