问题描述
我有以下代码:
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 }