减少循环复杂性,多个if语句[英] Reducing the cyclomatic complexity, multiple if statements

本文是小编为大家收集整理的关于减少循环复杂性,多个if语句的处理方法,想解了减少循环复杂性,多个if语句的问题怎么解决?减少循环复杂性,多个if语句问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有以下代码:

private Facility updateFacility(Facility newFacility, Facility oldFacility) {
    if (newFacility.getCity() != null)
        oldFacility.setCity(newFacility.getCity());
    if (newFacility.getContactEmail() != null) 
        oldFacility.setContactEmail(newFacility.getContactEmail());
    if (newFacility.getContactFax() != null) 
        oldFacility.setContactFax(newFacility.getContactFax());
    if (newFacility.getContactName() != null) 
        oldFacility.setContactName(newFacility.getContactName());
    // ......
}

大约有 14 个这样的检查和分配.即除少数外,我需要修改 oldFacility 对象的所有字段.我得到了这个代码 14 的圈复杂度,根据 SonarQube,它"大于 10 个授权".关于如何降低圈复杂度的任何想法?

推荐答案

在你的程序中的某个时刻,你必须实现逻辑:

  • 如果新设施定义了属性,请相应地更新旧设施
  • 如果不是,请勿覆盖旧设施的先前值.

如果没有全局查看您的项目,您可以做的是将该逻辑移动到每个属性的设置器中:

public class Facility {

    public void setSomething(String something) {
        if (something != null) {
            this.something = something;
        }
    }

}

这样,您的 update 方法将是:

private Facility updateFacility(Facility newFacility, Facility oldFacility) {
    oldFacility.setSomething(newFacility.getSomething());
    // etc for the rest
}

本文地址:https://www.itbaoku.cn/post/1793816.html