当前位置: 首页 > 知识库问答 >
问题:

重构这种方法,将其认知复杂度从18降低到允许的15

秦才良
2023-03-14

我得到声纳警告来降低它的复杂性。我如何重构下面的代码,将其认知复杂度从18降低到允许的15?

@Override
    public List<Audit> saveAudit(Object response, String user) {
        List<Audit> arrlist = new ArrayList<>();
        MSAUnderlyingStrategyDTO msaStrategy =(MSAUnderlyingStrategyDTO) response;
        try {
            Field[] members = MSAUnderlyingStrategyDTO.class.getDeclaredFields();
            Class<?> c = Class.forName("com.broadridge.pm.model.MSAUnderlyingStrategyDTO");
            for (Field m : members) {
                if (!m.getName().equalsIgnoreCase("serialVersionUID")
                        && !m.getName().equalsIgnoreCase("DATE_FORMAT")) {
                    var 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);
                    Object obj = c.getDeclaredMethod(createMethodName(m.getName())).invoke(msaStrategy);
                    if(obj!=null&& !obj.toString().isEmpty()) {
                        audit.setAttributeToValue(obj.toString());
                        if(m.getName().equalsIgnoreCase("msaUnderlyingStrategyName"))
                            audit.setAttributeName("underlying_strategy_name");
                        else if(m.getName().equalsIgnoreCase("msaUnderlyingPercentage"))
                            audit.setAttributeName("underlying_strategy_percentage");
                        else if(m.getName().equalsIgnoreCase("msaUnderlyingFoaId"))
                            audit.setAttributeName("underlying_strategy_code");
                        else if(m.getName().equalsIgnoreCase("styleId"))
                            audit.setAttributeName("style_node_id");
                        else if(m.getName().equalsIgnoreCase("strategyId"))
                            audit.setAttributeName("strategy_id");
                        else
                            audit.setAttributeName(m.getName());
                        arrlist.add(audit); 
                        }
                }
            }

共有1个答案

夏烨霖
2023-03-14

简单:通过将内容移动到帮助器方法中。

这里的真正要点是:代码质量不是由工具决定的。它需要开发人员对好代码的外观有一个共同的理解。

这需要:开发人员花时间学习和思考它。

 类似资料: