我现在被困在一些非常奇怪的类中,它们混淆了逻辑。下面是生成一个数据库查询代码的例子:降低代码的复杂性
if(realTraffic.getPvkp() != null) {
//Admission point
if(BeanUtils.isGuidEntity(realTraffic.getPvkp())) {
findParameters +=
" and (" + staticTableName() + ".guidPvkp = '" + realTraffic.getPvkp().getGuid()
+ "' or (" + staticTableName() + ".guidPvkpOut = '" + realTraffic.getPvkp().getGuid()
+ "' and " + staticTableName() + ".requestType = " + RequestBean.TRANSIT_TYPE
+ ")";
if (companyType == CompanyBean.PP_TYPE && !realTraffic.isSkipOther()) {
// TODO - add non-formed
findParameters += " or (" + staticTableName() + ".guidPvkpOut is null "
+ " and " + staticTableName() + ".requestType = " + RequestBean.TRANSIT_TYPE
+ ")";
}
findParameters += ") ";
} else {
// Territorial department
if(BeanUtils.isGuidEntity(realTraffic.getPvkp().getTerritorialDepartment())) {
findParameters +=
" and (Pvkp.guidTerritorialDepartment = '" + realTraffic.getPvkp().getTerritorialDepartment().getGuid()
+ "' or Pvkp.guidFtsDepartment = '" + realTraffic.getPvkp().getTerritorialDepartment().getGuid()
+ "') ";
}
}
}
这仅仅是一个巨大的一套复杂的检查,我有方法的一部分。问题是 - 如何处理这样的代码 - 它有很多嵌套的if和检查。为了使代码更简单和更优雅,常见的方法是什么?
UPD:我知道在编写新项目时如何避免这种代码,但是如何处理现有的遗留代码?
您已将您的答案作为标记:通过重构。 –
开始将块提取到私有方法中,它将压缩原始方法并使其更容易跟随并查看可以改进的方面 – Infested
婴儿步骤,只需一次一步重构。在这种情况下,你可以使用'StringBuilder'而不是'+'来处理所有这些字符串。 –