1. 程式人生 > >錯誤的枚舉用法

錯誤的枚舉用法

inf 成了 blog 數據 back turn getpara ont new

【承上文】

承上文[代碼整潔之道]你真的會用枚舉嗎?非也!

先劃重點:

如果把某域定義成了枚舉,那麽,正確使用枚舉要註意如下幾點

  • 除了對外交易的輸入輸出,程序內部涉及到該域的,一律用枚舉類型。例如:方法參數、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個字:可讀性提高了。

錯誤的枚舉用法