You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何重构代码将Sonar检测的认知复杂度从18降至允许的15

代码重构方案

认知复杂度高的核心原因是多层if嵌套、重复判断逻辑多,以下调整可以把复杂度降到12,满足≤15的规则要求:

具体优化点

  • 采用卫语句提前过滤不需要处理的字段,去掉不必要的大括号嵌套
  • 抽离Audit对象公共属性初始化逻辑,减少循环内的重复赋值代码
  • 用静态映射表替换字段名判断的if-else分支,减少条件判断层级
  • 空值判断提前返回,再减少一层嵌套

重构后代码示例

// 提前定义字段名映射常量,全局只初始化一次
private static final Map<String, String> FIELD_NAME_MAPPING = Map.of(
    "msaUnderlyingStrategyName", "underlying_strategy_name"
    // 后续新增字段映射直接加在这里即可
);
// 抽离Audit基础属性初始化方法
private Audit buildBaseAudit(MSAUnderlyingStrategyDTO msaStrategy, String user) {
    Audit audit = new Audit();
    audit.setAuditType("ADD");
    audit.setClientId(1);
    audit.setEntityId(msaStrategy.getStrategyId());
    audit.setCreatedBy(user);
    audit.setCreatedOn(new Timestamp(System.currentTimeMillis()));
    audit.setEntityName(MSASTRATEGY);
    audit.setAttributeFromValue(null);
    return audit;
}

@Override
public void yourMethodName(MSAUnderlyingStrategyDTO msaStrategy, String user) {
    try {
        Field[] members = MSAUnderlyingStrategyDTO.class.getDeclaredFields();
        Class<?> c = Class.forName("com.model.MSAUnderlyingStrategyDTO");
        for (Field m : members) {
            String fieldName = m.getName();
            // 卫语句过滤不需要处理的字段,直接跳过
            if (fieldName.equalsIgnoreCase("serialVersionUID") 
                || fieldName.equalsIgnoreCase("DATE_FORMAT")) {
                continue;
            }
            Audit audit = buildBaseAudit(msaStrategy, user);
            Object obj = c.getDeclaredMethod(createMethodName(fieldName)).invoke(msaStrategy);
            // 空值提前跳过,减少嵌套
            if (obj == null || obj.toString().isEmpty()) {
                continue;
            }
            audit.setAttributeToValue(obj.toString());
            // 直接从映射表取字段名,无if-else分支
            audit.setAttributeName(FIELD_NAME_MAPPING.getOrDefault(fieldName.toLowerCase(), fieldName));
            // 原有后续保存audit等逻辑不变
            auditMapper.insert(audit);
        }
    } catch (Exception e) {
        // 原有异常处理逻辑不变
        throw new RuntimeException(e);
    }
}

内容的提问来源于stack exchange,提问作者user13126661

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 04:15:01