是否有任何方法可以降低以下java代码的复杂性?
我需要根据sonar可接受的级别降低以下java方法的复杂性。现在,它给出了类似声纳的问题 这需要一些专家的帮助是否有任何方法可以降低以下java代码的复杂性?,java,java-8,refactoring,cyclomatic-complexity,Java,Java 8,Refactoring,Cyclomatic Complexity,我需要根据sonar可接受的级别降低以下java方法的复杂性。现在,它给出了类似声纳的问题 这需要一些专家的帮助 public List<X> Y(final DateTime treatmentDiscontinueTime, final List< P> validPrescribedPrescriptions) { final List<x>
public List<X> Y(final DateTime treatmentDiscontinueTime,
final List< P> validPrescribedPrescriptions)
{
final List<x> doseWrapperList = new ArrayList<>();
final int noOfPrescriptions = validPrescribedPrescriptions.size();
for (int prescriptionIndex = 0; prescriptionIndex < noOfPrescriptions; prescriptionIndex++)
{
final BasePrescribedPrescription basePrescribedPrescription = validPrescribedPrescriptions.get(prescriptionIndex);
final String firstDoseText = basePrescribedPrescription.getFirstText();
final String secondDoseText = basePrescribedPrescription.getSecondText();
final boolean accordingToSchedule = A.ACCORDING.equals(firstDoseText);
final boolean specificPrescription = A.SP.equals(firstDoseText);
final boolean specificVbTypePrescription = A.SPVB.equals(firstDoseText);
List<D> doseDetails = new ArrayList<>(basePrescribedPrescription.getDoseDetails());
final DateTime changedDosageEndDate =
getChangedDoseEndDate(basePrescribedPrescription.getActualTerminateDate(), treatmentDiscontinueTime);
final int noOfDosages = doseDetails.size();
for (int doseIndex = 0; doseIndex < noOfDosages; doseIndex++)
{
final D doseDetail = doseDetails.get(doseIndex);
if ((doseDetail.getStart().getStartDate() != null) && (changedDosageEndDate != null) &&
doseDetail.getStart().getStartDate().isAfter(changedDosageEndDate))
{
continue;
}
String previewDoseText;
if (accordingToSchedule)
{
previewDoseText = X
}
else if (specificPrescription)
{
previewDoseText = Y;
}
else if (specificVbTypePrescription)
{
previewDoseText = Z;
}
else if (noOfDosages == 2)
{
previewDoseText = ((doseIndex == 0) ? secondDoseText : firstDoseText);
}
else
{
previewDoseText = firstDoseText;
}
final boolean isUnplanned =isuNplaned()
if (!isUnplanned)
{
doseStart = getStartDate();
doseEnd = getEndDate();
}
doseWrapperList.add(new DoseInfoLiteDTOWrapper(previewDoseText, doseStart, doseEnd, doseDetail));
}
}
return doseWrapperList;
}
我需要一些专家的帮助来解决这个声纳问题。我想用不同的方法来提取代码片段,将此方法分解为几个部分。但仍然找不到合适的方法来执行此操作。不难弄清楚,我认为: 使用简单For循环 创建更多的小方法来为循环执行smallclear操作 Block if/esle:使用简单语句
提示:学习TDD以尽可能编写干净的代码如果代码有效,请前往询问。提示:仅在有意义的地方使用final。将它附加到每个变量和任何变量都会产生大量无用的行噪波。您可以尝试的一件事是将这个巨大的if块移动到一个方法中,如previewDoseText=theNewMethod.previewDoseText=doseIndex==0?第二个dosetext:第一个dosetext;看起来不对。。。当然,如果是第0剂,那就不是第二剂了?@uma它可能会起作用,但它看起来是错误的,因此会增加认知负担。只是记录在案:一个人可以遵循干净的代码而不需要tdd。但是tdd做得好肯定会有帮助!是的,有很多方法可以做到这一点,tdd不难学习,但不容易应用。对我来说,尽可能地结合一切:+OOP+设计模式+实体+TDD。。。。