重构此方法以将其认知复杂度从 19 降低到允许的 15

问题描述 投票:0回答:1

如何降低给定代码的复杂性?我在 Sonarqube 中收到此错误---> 重构此方法以将其认知复杂度从 19 降低到允许的 15。

因为我可以降低 sonarQube 中标记的复杂度,并且基于这个问题,它告诉我我仍然减少 break 语句的总数,并继续在这个循环中使用最多一个。

public void validateV(String date, List<DataCustomersHV> dataCustomersHVList) throws IOException  {
        
        logger.info("Obteniendo lista ejecutivos enroladores.... ");
        long limit = Long.parseLong(ConstantsFiles.LIMIT);
        double scoreAuthenticationHV = Double.parseDouble(PropertiesCache.getInstance().getProperty("SCORE_AUTHENTICATION_HV"));
        List<String> notSendLynxs = new ArrayList<>();
        List<String> codesEnrollmentList = new ArrayList<>();
        List<DataGenerateFiles> dataGenerateFilesList = null;
        GenerateFilePE generateFile = null;
        RestLynxs restLynxs = null;
        
        logger.info("Iniciando proceso 1 : N ..... ");
        QueriesVV executeQuery = new QueriesVV();
        List<DataCustomersME> dataCustomersMEList = executeQuery.getDataCustomersME();
        logger.info("Total de ejecutivos: " + dataCustomersMEList.size());
        int delivery = dataCustomersMEList.size() / 1000 + 1;
        for (DataCustomersHV dataCustomersHV : dataCustomersHVList) {
            int asOf = 0;
            int cdScore = 0;
            boolean enrollment = true;
            boolean serviceError = true;
            
            for (int i = 1; i <= delivery; i++) {  
                List<DataCustomersME> credentialListMil = dataCustomersMEList.stream()
                        .skip(asOf * limit)
                        .limit(limit)
                        .collect(Collectors.toList());
                
                DataValidServiceDaskpeak resp = null;
                logger.info("Validando cliente: " + dataCustomersHV.getCdUsuario());
                resp = restDaskpeak.getService((List<DataCustomersME>) credentialListMil, dataCustomersHV.getTxCredencialReference());
                if(resp.isTrue()) {
                    cdScore = (int) (resp.getScore() * 1000);
                    logger.info("cdScore: " + cdScore);
                    if (resp.getScore() >= scoreAuthenticationHV) {
                        logger.info("Rechazo por similitud en voz");
                        logger.info("Actualizando estatus a No enrolado: " + dataCustomersHV.getCdEnrolamiento());
                        executeQuery.updateStatusEnrollment(dataCustomersHV.getCdEnrolamiento(), ConstantsGenerals.ESTATUS_DOS);
                        executeQuery.insertCodesResponse(ConstantsGenerals.ESTATUS_CEROSIETE, dataCustomersHV.getCdEnrolamiento(), dataCustomersHV.getFhRegistro(), dataCustomersHV.getCdDispositivo(), dataCustomersHV.getCdUsuario(), cdScore);
                        enrollment = false;
                        break;
                    } 
                }else {
                    serviceError = resp.isTrue();
                    break;
                }
                
                asOf++;
            }

            if (enrollment) {
                if(serviceError) {
                    logger.info("Actualizando estatus a Enrolado: " + dataCustomersHV.getCdEnrolamiento());
                    executeQuery.updateStatusEnrollment(dataCustomersHV.getCdEnrolamiento(), ConstantsGenerals.ESTATUS_UNO);
                    executeQuery.insertCodesResponse(ConstantsGenerals.ESTATUS_DOBLECERO, dataCustomersHV.getCdEnrolamiento(), dataCustomersHV.getFhRegistro(), dataCustomersHV.getCdDispositivo(), dataCustomersHV.getCdUsuario(), cdScore);
                } else {
                    logger.info("Error de procesamiento");
                    executeQuery.updateStatusEnrollment(dataCustomersHV.getCdEnrolamiento(), ConstantsGenerals.ESTATUS_DOS);
                    executeQuery.insertCodesResponse(ConstantsGenerals.ESTATUS_SIETEOCHO, dataCustomersHV.getCdEnrolamiento(), dataCustomersHV.getFhRegistro(), dataCustomersHV.getCdDispositivo(), dataCustomersHV.getCdUsuario(), cdScore);
                    notSendLynxs.add(dataCustomersHV.getCdUsuario());
                }
            }
            
            codesEnrollmentList.add(dataCustomersHV.getCdEnrolamiento());
            
        }
        logger.info("... Proceso de validacion 1 : N terminada ");
        
        logger.info("Obteniendo datos complementarios para notificaciones");
        dataGenerateFilesList = executeQuery.getDataGenerateFiles(CodesEnrollment.codesEnrollment(codesEnrollmentList));
        logger.info("Total de clientes: " + dataGenerateFilesList);
         
        if (dataGenerateFilesList.isEmpty()) {
            restLynxs = new RestLynxs();
            restLynxs.getServiceLynxs(dataGenerateFilesList, notSendLynxs);
        } else {
            logger.info("Lista de clientes vacia");
        }       
        generateFile = new GenerateFilePE();
        generateFile.generateFile(date, dataGenerateFilesList);
    }
java sonarqube
1个回答
0
投票

这个

            if (resp.isTrue()) {
                // ...
                if (resp.getScore() >= scoreAuthenticationHV) {
                    // ...
                    enrollment = false;
                    break;
                } 
            } else {
                serviceError = resp.isTrue();
                break;
            }

可以写成

            serviceError = resp.isTrue();
            if (!serviceError) {
                // ...
                if (resp.getScore() >= scoreAuthenticationHV) {
                    // ...
                    enrollment = false;
                } 
            }
            if (serviceError || !enrollment) {
                break;
            }

减少了

break
语句的数量。

© www.soinside.com 2019 - 2024. All rights reserved.