首页 > 其他 > 详细

替换代码中大量的if else

时间:2021-01-12 20:38:20      阅读:47      评论:0      收藏:0      [点我收藏+]

 代码中大量的if else 无疑会让代码的可读性变差,版本迭代时发现代码可读性太差,改了一下,顺便记录一下。

一、改之前的代码

 @Override
    @Transactional(rollbackFor = Exception.class)
    public void publishLbAppHome(String platformCode,String pcUid, ResponseParams response ,String siteCode) {

        //入参校验
        if (StringUtils.isEmpty(pcUid)) {
            log.info("getLdAppHome --- check param error :{}", "pcUid不能为空");
            response.setCodeAndMessage(PARAM_ERROR_CODE, PARAM_ERROR_DESC);
            return;
        }

        //发布听书首页数据
        if("APP".equals(platformCode)){
            //中国大陆 APP
            if("CN".equals(siteCode)){
                lbListenMapper.publishLbHomePageAppCn();
            }
            //其他地区 APP
            if("OTHER".equals(siteCode)){
                lbListenMapper.publishLbHomePageAppOther();
            }
        }else if("HD".equals(platformCode)){
            //中国大陆 HD
            if("CN".equals(siteCode)){
                lbListenMapper.publishLbHomePageHdCn();
            }
            //其他地区 HD
            if("OTHER".equals(siteCode)){
                lbListenMapper.publishLbHomePageHdOther();
            }
        }else if ("GUSHIJI".equals(platformCode)){
            lbListenMapper.publishLbHomePageGushiji();
        }else{
            log.info("platformCode --- check param error :{}", "参数错误");
            response.setCodeAndMessage(PARAM_ERROR_CODE, PARAM_ERROR_DESC);
            return;
        }
        redis.del(LB_APP_DATA_KEY + "_" + platformCode);
        response.success();
    }

二、修改之后

 @Override
    @Transactional(rollbackFor = Exception.class)
    public void publishLbAppHome(String platformCode,String pcUid, ResponseParams response ,String siteCode) {

        //入参校验
        if (StringUtils.isEmpty(pcUid)) {
            log.info("getLdAppHome --- check param error :{}", "pcUid不能为空");
            response.setCodeAndMessage(PARAM_ERROR_CODE, PARAM_ERROR_DESC);
            return;
        }

        //根据平台编码和站点信息 执行对应的听书首页发布操作 故事机不区分国内和其他地区
        String operatorEnum = "GUSHIJI".equals(platformCode) ? platformCode: platformCode + siteCode;
        PublishLbAppHomeCalculator calculator = new PublishLbAppHomeCalculator();
        PublishLbAppHomeOperator lbAppHomeOperator = null;
        try {
            lbAppHomeOperator = PublishLbAppHomeOperator.valueOf(operatorEnum);
        }catch (Exception e){
            log.info("platformCode --- check param error :{}", "参数错误");
            response.setCodeAndMessage(PARAM_ERROR_CODE, PARAM_ERROR_DESC);
            return;
        }
        calculator.calculate(lbListenMapper , lbAppHomeOperator);

        redis.del(LB_APP_DATA_KEY + "_" + platformCode);
        response.success();
    }

三、这里使用的是枚举方式重构

1、创建枚举类:

/**
 * @author D-L
 * @program: ella-server
 * @description: 听书首页发布操作
 * @date 2021-01-12 11:24:18
 */
@Slf4j
public enum PublishLbAppHomeOperator {


    APPCN {
        @Override
        public void apply(LbListenMapper lbListenMapper) {
            lbListenMapper.publishLbHomePageAppCn();
            log.info("国内app听书首页发布成功");
        }
    },

    APPOTHER {
        @Override
        public void apply(LbListenMapper lbListenMapper) {
            lbListenMapper.publishLbHomePageAppOther();
            log.info("其他地区app听书首页发布成功");
        }
    },

    HDCN {
        @Override
        public void apply(LbListenMapper lbListenMapper) {
            lbListenMapper.publishLbHomePageHdCn();
            log.info("国内HD听书首页发布成功");
        }
    },

    HDOTHER {
        @Override
        public void apply(LbListenMapper lbListenMapper) {
            lbListenMapper.publishLbHomePageHdOther();
            log.info("其他地区HD听书首页发布成功");
        }
    },

    GUSHIJI {
        @Override
        public void apply(LbListenMapper lbListenMapper) {
            lbListenMapper.publishLbHomePageGushiji();
            log.info("故事机听书首页发布成功");
        }
    };

    public abstract void apply(LbListenMapper lbListenMapper);
}

2、封装操作方法

/**
 * @author D-L
 * @program: ella-server
 * @description: 将听书首页发布操作封装
 * @date 2021-01-12 11:31:15
 */

public class PublishLbAppHomeCalculator {
    public void calculate(LbListenMapper lbListenMapper, PublishLbAppHomeOperator operator) {
        operator.apply(lbListenMapper);
    }
}

 

替换代码中大量的if else

原文:https://www.cnblogs.com/dongl961230/p/14267531.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!