A011.内测.重构坏味代码
迷你版的财务记账,包括了余额,交易和明细三块。
能够满足基本的记账要求:对账,红订正,做报表。
@史荣久 / 2016-06-18 / CC-BY-SA-3.0
任务说明
重构的目标是保证功能不变,提升可读性或其他指标,如性能,安全,质量等。
- 指出以下2段代码的坏味道。
- 并写出2种以上重构方案。
初级重构,代码语义转换。
中级重构,分析业务逻辑。
一般认为,能重构以上代码者,应从业一两年,撸码数万行。有代码节操,有逻辑思考力。
坏味代码
初级重构的代码片段
List<String> list = new ArrayList(Arrays.asList("AZ", "CA", "CO", "ID", "MT", "NM", "NV", "OR", "UT", "WA", "WY"));
int cnt= 0;
for(int i = 0; i < list.size() ; i++, cnt= 0){
if(view.getProvince() != null && view.getProvince().equals(list.get(i))){
cnt = 1;
break;
}
}
if(cnt == 1){
vo.put("wareHouse", "加州仓库");
} else {
vo.put("wareHouse", "纽约仓库");
}
中级重构的代码片段
// 代码2,需要重建丢失的类或接口
String type = row.get(11); //服务类型
int serviceType = 0;
if (type.equals(GROUND)) {
serviceType = ServiceTypeEnum.FEDEX_GROUND.code();
} else if (type.equals(INTERNATIONAL1) || type.equals(INTERNATIONAL2)) {
continue;
}
List<BaggagePo> baggagePos = baggageDao.findByOrderMainId(orderMainPo.getId());
int k = 0;
int l = 0;
List<String> orderNumNoUse = new ArrayList<>();
List<String> orderNumUse = new ArrayList<>();
if (orderMainPo.getIsLocal() == 1) {
for (BaggagePo po : baggagePos) {
if (po.getStatus() == OrderStatusEnum.USUS_PICK.code()) {
orderNumNoUse.add(k, po.getTrackNumUs());
k++;
}
if (po.getStatus() != OrderStatusEnum.USUS_PICK.code()) {
orderNumUse.add(l, po.getTrackNumUs());
l++;
}
}
List<ImptFedexBillsPo> imptFedexBillsPos = fedexBillsDao.findByOrderMainId(orderMainPo.getId());
if (DecimalUtil.add(new BigDecimal(imptFedexBillsPos.size()), new BigDecimal(k)).equals(new BigDecimal(baggagePos.size()))) {
orderMainService.updateStatus(orderMainPo.getId(), OrderStatusEnum.USUS_PAY.code());
for (BaggagePo po : baggagePos) {
BaggagePo baggagePo = baggageDao.findById(po.getId());
baggagePo.setModifyTime(new Date());
baggagePo.setStatus(OrderStatusEnum.USUS_PAY.code());
if (orderNumNoUse == null) {
int cnt = baggageDao.updateBaggage(baggagePo);
DaoUtil.assertUpdateOne(cnt, baggagePo);
}
for(String s : orderNumUse){
if (s.equals(baggagePo.getTrackNumUs())) {
int cnt = baggageDao.updateBaggage(baggagePo);
DaoUtil.assertUpdateOne(cnt, baggagePo);
}
}
}
}
}
}
题图:不忘初心,方得始终。攻城狮精神是,孜孜不倦的,精益求精的"Just Do It"。