码迷,mamicode.com
首页 > 其他好文 > 详细

错误的枚举用法

时间:2018-08-16 16:35:53      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:stringbu   输入   notify   bsp   找不到   post   其他   个人   homepage   

【承上文】

承上文[代码整洁之道]你真的会用枚举吗?非也!

先划重点:

如果把某域定义成了枚举,那么,正确使用枚举要注意如下几点

  • 除了对外交易的输入输出,程序内部涉及到该域的,一律用枚举类型。例如:方法参数、bo的属性。
  • 接收到外来的数据后,在使用该域时,应先把该域转换成枚举类型。

 

接下来举例继续唠叨。

 

【错误的枚举用法】

如下方法:

    public static String getMNBNotifyUrl(YGBizMessageContext bizCtx, String reqCode, String notifyTyp,
            boolean isBack, Logger logger) {
        StringBuffer sb = new StringBuffer();
        sb.append(bizCtx.getPara("_MNB_NOTIFY_ADDR"));//cde syscfg.xml里http://192.168.40.222:9280/bkg/
        sb.append(notifyTyp).append("/");

        if (isBack) {
            sb.append("b");
        }

        sb.append("notify").append(".");
        sb.append(reqCode);
        logger.infoFmt("获取回调地址[{}]", sb.toString());

        return sb.toString();
    }

 

调用:

String noticeUrl = MNBUtils.getMNBNotifyUrl(bizCtx, MNBNotifyCodeEnum.IBPay.getValue(),
                NotifyDataTypeEnum.FORM.getNotifyTyp(), true, logger);//
String returnUrl = MNBUtils.getMNBNotifyUrl(bizCtx, MNBNotifyCodeEnum.IBPay.getValue(),
                NotifyDataTypeEnum.FORM.getNotifyTyp(), false, logger);//

 

【重构为】

方法改为:

    public static String getMNBNotifyUrl(YGBizMessageContext bizCtx, MNBNotifyCodeEnum reqCode, NotifyDataTypeEnum notifyTyp,
            boolean isBack, Logger logger) {
        StringBuffer sb = new StringBuffer();
        sb.append(bizCtx.getPara("_MNB_NOTIFY_ADDR"));//cde syscfg.xml里http://192.168.40.222:9280/bkg/
        sb.append(notifyTyp.getNotifyTyp()).append("/");

        if (isBack) {
            sb.append("b");
        }

        sb.append("notify").append(".");
        sb.append(reqCode.getValue());
        logger.infoFmt("获取回调地址[{}]", sb.toString());

        return sb.toString();
    }

 

调用:

String noticeUrl = MNBUtils.getMNBNotifyUrl(bizCtx, MNBNotifyCodeEnum.IBPay, NotifyDataTypeEnum.FORM, true, logger);//
String returnUrl = MNBUtils.getMNBNotifyUrl(bizCtx, MNBNotifyCodeEnum.IBPay, NotifyDataTypeEnum.FORM, false, logger);//

 

【分析】

上面的getMNBNotifyUrl方法是一个Util方法,供工程里各module调用。其他module的开发人跟这个方法的开发人往往不是同一个人。

我们比较重构前后的可读性,看原来的方法,reqCode和notifyTyp是String,调用者并不清楚传什么值,只有看哪里调用了才能明白;如果找不到调用的代码,那么就只能去问定义这个方法的程序猿了。而重构后将这2个参数改为枚举,一目了然!

退一万步讲,即使调用者和定义者是同一个人,重构后的代码也比之前的要好,为什么?还是那3个字:可读性提高了。

错误的枚举用法

标签:stringbu   输入   notify   bsp   找不到   post   其他   个人   homepage   

原文地址:https://www.cnblogs.com/buguge/p/9487855.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!