代码中大量的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); } }
原文:https://www.cnblogs.com/dongl961230/p/14267531.html