相关疑难解决方法(0)

您维护的任何功能的最高Cyclomatic复杂度是多少?你将如何重构呢?

我正在对我维护的遗留系统进行一些探索,前几天使用NDepend(很棒的工具检查出来).我的发现几乎让我在屏幕上喷了一口咖啡.该系统中按行圈复杂度递减排名的前3个函数是:

  1. SomeAspNetGridControl.CreateChildControls(CC为171 !!!)
  2. SomeFormControl.AddForm(CC为94)
  3. SomeSearchControl.SplitCriteria(CC为85)

我的意思是171,哇!不应该低于20或什么?所以这让我很奇怪.您维护或重构的最复杂功能是什么?你将如何重构这样的方法?

注意:我测量的CC是在代码上,而不是IL.

refactoring cyclomatic-complexity

14
推荐指数
1
解决办法
9924
查看次数

如何分割复杂的条件并保持短路评估?

有时条件会变得非常复杂,因此为了便于阅读,我通常会将它们拆分并为每个组件指定一个有意义的名称.然而,这会使短路评估失败,这可能造成问题.我想出了一个包装器的方法,但在我看来它太冗长了.

有人可以为此提出一个简洁的解决方案吗?

请参阅下面的代码,了解我的意思:

public class BooleanEvaluator {

    // problem: complex boolean expression, hard to read
    public static void main1(String[] args) {

        if (args != null && args.length == 2 && !args[0].equals(args[1])) {
            System.out.println("Args are ok");
        }
    }

    // solution: simplified by splitting up and using meaningful names
    // problem: no short circuit evaluation
    public static void main2(String[] args) {

        boolean argsNotNull = args != null;
        boolean argsLengthOk = args.length == 2;
        boolean argsAreNotEqual = !args[0].equals(args[1]);

        if (argsNotNull && argsLengthOk && …
Run Code Online (Sandbox Code Playgroud)

java

12
推荐指数
3
解决办法
3505
查看次数

标签 统计

cyclomatic-complexity ×1

java ×1

refactoring ×1