代码重构之去掉if-else判断

前言

最近在对接一个业务功能,用到了前人写的代码功能点,需要在上边做功能,之前的写法就是if-else的判断,已经有四个这样的判断,而我这次的功能,如果要在之前的基础上继续开发的话,需要再加两个if-else判断,这样开发起来是快,但是凭着好的习惯来说,我还是想把这块代码重构下,方便后续代码的可读性和可扩展性。

其实去掉if-else这样的写法,一定是有个前提的,就是代码已经有点堆砌,并且随着后续业务的发展,还有可能继续增加,在这样的前提下就需要考虑进行代码重构了。至于重构方式,其实是通用的,基本上就是工厂模式+策略模式,接下来看下我们的处理。
重构的业务大致说明下:其实就是查询功能,但是条件不一样,一级菜单总共有4个,每个下边又有二级菜单,不同的二级菜单,查询的地址不一样。
代码重构之去掉if-else判断_第1张图片
看下原先的代码写法:
代码重构之去掉if-else判断_第2张图片
已经有5处if-else的判断了,我要是再加的话就需要再加两个了,看下重构后的方式:
重新定义枚举说明:
OrderTabEnum

public enum OrderTabEnum {
     
    ALL(0,0, "全部","allIncomeService"),

    SPREAD_ORDER(1, 1,"推广收入-会员卡","orderIncomeService"),
    SPREAD_CONTENT(1, 2,"推广收入-分享影片","contentIncomeService"),
    SPREAD_CARD(1, 4,"推广收入-联名银行卡","bankCardIncomeService"),

    RED_ORDER(2, 1,"红包收入-会员卡","orderIncomeService"),
    RED_CONTENT(2, 2,"红包收入-分享影片","contentIncomeService"),
    RED_JOINRED(2, 3,"红包收入-拉新红包(超过6个人才会返现)","joinRedIncomeService"),
    RED_CARD(2, 4,"红包收入-联名银行卡","bankCardIncomeService"),

    AWARD(3, 0,"奖金收入","awardIncomeService");

    OrderTabEnum(Integer firstMenuValue, Integer twoMenuValue,String desc,String service) {
     
        this.firstMenuValue = firstMenuValue;
        this.twoMenuValue = twoMenuValue;
        this.desc = desc;
        this.service=service;
    }

    /**
     * 一级菜单
     */
    private Integer firstMenuValue;
    /**
     * 二级菜单
     */
    private Integer twoMenuValue;

    private String desc;

    private String service;

    public Integer getFirstMenuValue() {
     
        return firstMenuValue;
    }

    public void setFirstMenuValue(Integer firstMenuValue) {
     
        this.firstMenuValue = firstMenuValue;
    }

    public Integer getTwoMenuValue() {
     
        return twoMenuValue;
    }

    public void setTwoMenuValue(Integer twoMenuValue) {
     
        this.twoMenuValue = twoMenuValue;
    }

    public String getDesc() {
     
        return desc;
    }

    public void setDesc(String desc) {
     
        this.desc = desc;
    }

    public String getService() {
     
        return service;
    }

    public void setService(String service) {
     
        this.service = service;
    }
}

工厂类:
IncomePageFactory

@Component
public class IncomePageFactory {
     

    @Resource
    private ApplicationContext applicationContext;

    public IncomePageService getIncomePageService(Integer incomeType, Integer incomeTab){
     

        if(OrderTabEnum.ALL.getFirstMenuValue().equals(incomeType)){
     
            return (IncomePageService)applicationContext.getBean(OrderTabEnum.ALL.getService());
        }
        
        if(OrderTabEnum.AWARD.getFirstMenuValue().equals(incomeType)){
     
            return (IncomePageService)applicationContext.getBean(OrderTabEnum.AWARD.getService());
        }
        ......
        return null;
    }

}

抽取公共接口,相同的入参和出参

public interface IncomePageService {
     

    /**
     * 获取收入明细信息
     * @param params
     * @return
     */
    PageListResult<IncomePageDTO> getIncomePageInfo(Map<String, Object> params);
}

不同业务实现接口:
代码重构之去掉if-else判断_第3张图片
里边就是具体的业务实现了,然后修改入口处,直接一行代码搞定,简单明了。

return incomePageFactory.getIncomePageService(incomeType, incomeTab).getIncomePageInfo(params);

你可能感兴趣的:(代码重构系列,java,spring)