如何降低给定代码的复杂性?我在 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);
}
这个
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
语句的数量。