2 u012323072 u012323072 于 2016.01.20 21:31 提问

请教一下,我这边的代码该如何优化一下

图片说明

3个回答

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.01.20 22:13
已采纳

首先,你的if内层分支过多,可以用switch替代,并且抽取成一个方法;其次,你的if(isContinue)可以与外层的if条件合并的。
参考优化代码如下:

 boolean isTokenOk = tokenCheck.equals(token);
if(isTokenOk&&isContinue){
    obj = orderStatusService.updateOrderStatus(orderStatus,actionId);
    printActionInfo(actionId);  
}else {
    obj.setStatus(1);
    if(isContinue){
        obj.setMsg("当前状态与上级状态不匹配,无法修改");
    }else{
        obj.setMsg("校验不通过");
    }
}

抽取方法if分支方法如下:

 printActionInfo(int actionId){
    switch(actionId){
    case 20:
        //
        break;
    case 30:
        //
        break;
    case 40:
        //
        break;
    case 50:
        //
        break;
    }   
}
u012323072
u012323072 回复毕小宝: 是这样的...我写的那些打印语句其实是要调用service的方法的...
接近 2 年之前 回复
wojiushiwo945you
wojiushiwo945you 回复Zzro: 这些信息可以作为常量重文件中读入,或者直接用map以actionId为key存入内存中。
接近 2 年之前 回复
wojiushiwo945you
wojiushiwo945you 回复Zzro: 什么叫状态模式呢?主要就是重构你内层if的各个actionId对应的打印不同的这段代码。
接近 2 年之前 回复
u012323072
u012323072 感谢~~~我一直在想是不是可以用类似状态模式的方法来重构一下呢?能不能给点思路啊
接近 2 年之前 回复
Mr_dsw
Mr_dsw   Ds   Rxr 2016.01.20 21:39

if判断太多了,用switch

yuanyong1982
yuanyong1982   2016.01.20 22:04

用map将你的ID和对应的信息做个映射,然后那一堆if else变成从map里面去信息出来打印就行了

u012323072
u012323072 打印出来的其实我需要调用的接口实现....
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!