錯誤的枚舉用法
阿新 • • 發佈:2018-08-16
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個字:可讀性提高了。
錯誤的枚舉用法