【java】萬惡的魔法值
阿新 • • 發佈:2021-02-08
在最近的小云通知專案中,我負責維護後端的開發,也是深刻體會到用魔法值會給維護人員帶來多大的痛苦!可謂一個bug改一天……
文章目錄
什麼是魔法值
首先我們說一下什麼是魔法值,所謂魔法值,就是未經預定義的常量,在阿里巴巴java開發手冊上也明確規定,不允許使用魔法值。
這裡我們發現,由於B同學用 Id#taobao 來提取快取中的內容,但是少了下劃線,因為快取中沒有匹配的 key 與之相對應,所以在快取中根本找不到,資料只能去資料庫中查詢。如果資料量少,那影響比較小,但是如果是幾百萬條資料,那對於資料庫的開銷真的是比較嚴重,查詢效率也會隨之變慢。
怎麼處理魔法值
知道了魔法值的危害,那麼我們就將去解決這個問題
例子一:
if (peopleSum >= 35) {
//todo
} else {
//todo
}
這如果讓維護人員看,就會感到莫名奇妙,為什麼偏偏這麼多變數中會有一個35,這個35是什麼意思。不知道有沒有人像我一樣,忽然在一堆業務邏輯裡出現一個未定義的常量,頭大啊!
那麼我們怎麼去處理呢?
我們可以宣告一個定義的常量來代替35
static final Integer INITIAL_NUMBER = 75;
用常量來說明這是一個初始人數
例子二:
if (notify. getCateId() == 1) {
//todo
} else if (notify.getCateId() == 2) {
//todo
}
這裡是判斷通知的型別,1、2 為資料庫中通知型別的id
,但是我們會發現,如果讓沒有接觸過的人來看,就會很奇怪,1 代表的是什麼,2代表的是什麼,加大了維護的難度。
我們可以構造一個列舉類去代替。
@Getter
@AllArgsConstructor
@NoArgsConstructor
public enum NotifyCaseEnum {
MEETING(1, "會議通知"),
SOLITAIRE(2, "接龍" ),
TASK(3, "作業");
private int code;
private String msg;
}
這樣不管是開發人員還是維護人員,在讀程式碼的時候也是清楚明瞭,方便性大大提升。
所以我們在開發的時候,及時專案規範中沒有寫出,我們也應該有自我意識,認識到程式碼的規範性,寫出高效優雅得到程式碼質量。
大家有任何建議和想法也可以在下方評論,一起進步,加油