buguge - Keep it simple,stupid

知识就是力量,但更重要的,是运用知识的能力why buguge?

导航

(5/8)枚举的错误用法 之 方法体内部

▄︻┻┳═一Agenda:

▄︻┻┳═一(1/8)[代码整洁之道]你真的会用枚举吗?非也!

▄︻┻┳═一(2/8)枚举的错误用法 之 方法参数

▄︻┻┳═一(3/8)枚举的错误用法 之 方法参数(二)

▄︻┻┳═一(4/8)枚举的错误用法 之 方法返回值

▄︻┻┳═一(5/8)枚举的错误用法 之 方法体内部

▄︻┻┳═一(6/8)枚举的错误用法 之 分支判断

▄︻┻┳═一(7/8)借助枚举说一下数据类型定义规范

▄︻┻┳═一(8/8)RPC接口能用枚举就请考虑枚举


 

 

继续讲枚举的使用。前文阐释了方法请求参数、方法返回值、POJO属性定义成枚举类型的好处。本文讲在方法里使用枚举的妙处。

【先上代码】

private boolean riskCheck(RefundReqBO refundReq, RefundRspBO refundRsp, RpmOrdDO rpmOrd, RpmRtulDO rpmRtul, YGBizMessageContext ctx) throws YGException {
    Logger logger = YGLogger.getLogger();
    ... ...

    String busTyp = RRCBusTypEnum.USER_CONSUME_REFUND_REFUND.getValue();
    if(AcPayFlgEnum.NO_ACCOUNT_PAYMENT.getValue().equals(rpmOrd.getAcPayFlg())){
        busTyp = RRCBusTypEnum.GWAY_CONSUME_REFUND.getValue();
    }

    RealTimeRiskCheckReqBO riskReq = new RealTimeRiskCheckReqBO();
    riskReq.setTxCd(refundReq.getGda().getTxCd());
    ... ...
    /** 此处省略15行代码 **/
    ... ...
    riskReq.setBusTyp(busTyp);
    ... ...
}

 

本文要说的就是上面方法里busTyp变量的类型。

注意上面方法里省略的15行代码 ,正是这么多行逻辑代码的存在,当我们滚屏时,会给我们理解下文里出现的busTyp带来麻烦:busTyp具体指?又会有哪些值? 用我的14寸的笔记本电脑截屏如下,可以直观地看到,一屏显示不全这个变量的定义和使用。

 

【重构方式】

在上面的方法体里,把busTyp定义为了String,由于代码行多,在下文看到这个变量后,因为是字符串,所以难免不知道它是会存哪些值。这时呢,我们只好再翻上面的代码查看它的定义和赋了哪些值。

而如果把busTyp定义为RRCBusTypEnum,那么下文在用到的时候,就能直观的知道它的含义以及它的具体取值范围,从而提高了可读性。 

BTW,不管存不存在那15行代码,把busTyp定义为RRCBusTypEnum,用的时候再取它对应的属性,这无疑是个好的编程习惯,因为代码整洁度高!

重构后的代码为:

private boolean riskCheck(RefundReqBO refundReq, RefundRspBO refundRsp, RpmOrdDO rpmOrd, RpmRtulDO rpmRtul, YGBizMessageContext ctx) throws YGException {
    Logger logger = YGLogger.getLogger();
    ... ...

    RRCBusTypEnum busTyp = RRCBusTypEnum.USER_CONSUME_REFUND_REFUND;
    if(AcPayFlgEnum.NO_ACCOUNT_PAYMENT.getValue().equals(rpmOrd.getAcPayFlg())){
        busTyp = RRCBusTypEnum.GWAY_CONSUME_REFUND;
    }

    RealTimeRiskCheckReqBO riskReq = new RealTimeRiskCheckReqBO();
    riskReq.setTxCd(refundReq.getGda().getTxCd());
    ... ...
    /** 此处省略15行代码 **/
    ... ...
    riskReq.setBusTyp(busTyp.getValue());
    ... ...
}

 

posted on 2018-08-17 19:34  buguge  阅读(719)  评论(0编辑  收藏  举报