从最近开始,我就在SonarLint for Eclipse中使用它,这对我有很大帮助。但是,它向我提出了关于圈复杂度的问题。
SonarLint认为可接受的CC为10,在某些情况下我超出了CC,大约为5或6个单位。这些部分与映射器相关,其中值依赖于不同的变量,例如:
- 字段A依赖于字符串sA;
- 字段B依赖于String sB;
- 字段C依赖于String sC;
- 等...
我别无选择,只能if
为每个领域放一个。(幸运的是)这不是我的选择,而是我自己无法更改的已经存在的复杂系统。
我的问题的核心是:为什么单一方法中 CC不能过高如此重要?如果您将某些条件转移到一个或多个子方法中以降低复杂性,那么它并不能降低整体功能的成本,只是将问题转移到其他地方,我猜?
(对不起的小错误,如有)。
编辑
我的问题不涉及全局圈复杂性,而仅涉及单个方法的复杂性和方法的拆分(抱歉,我很难解释我的意思)。我在问为什么如果仍然属于“超级方法”,为什么可以将您的条件拆分为较小的方法,而超级方法只能执行每个子方法,从而增加了算法的复杂性。
但是,第二个链接(关于反模式)很有帮助。