1. 程式人生 > 其它 >【java】萬惡的魔法值

【java】萬惡的魔法值

技術標籤:javajava

在最近的小云通知專案中,我負責維護後端的開發,也是深刻體會到用魔法值會給維護人員帶來多大的痛苦!可謂一個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; }

這樣不管是開發人員還是維護人員,在讀程式碼的時候也是清楚明瞭,方便性大大提升。
所以我們在開發的時候,及時專案規範中沒有寫出,我們也應該有自我意識,認識到程式碼的規範性,寫出高效優雅得到程式碼質量。

大家有任何建議和想法也可以在下方評論,一起進步,加油