程式碼異味
2006 年 2 月 9 日
程式碼異味是表面上的徵兆,通常對應到系統中更深層的問題。這個術語最早是由肯特·貝克在我協助撰寫 重構 一書時所創造的。
上述的快速定義包含幾個微妙的重點。首先,異味根據定義是某種容易發現的事物,或者如我最近所說的「嗅得出來」。長方法就是一個很好的例子,只要看程式碼,如果我看到超過十幾行 Java,我的鼻子就會抽動。
第二個重點是,異味並不總是表示有問題。有些長方法是很好的。你必須深入了解,才能看出是否有潛在的問題。異味本身並非天生就不好,它們通常是問題的指標,而不是問題本身。
最好的異味是容易發現的,而且大部分時間會引導你找出真正有趣的問題。資料類別(包含所有資料,但沒有行為的類別)就是一個很好的例子。你會看著它們,問自己這個類別應該有什麼行為。然後你開始重構,將那個行為移進去。通常,簡單的問題和最初的重構可能是將貧血物件轉變為真正有類別的物件的關鍵步驟。
異味的好處之一是,即使沒有足夠的知識來評估是否有真正的問題或如何修正,沒有經驗的人也很容易發現它們。我聽過一些資深開發人員會選出「本週異味」,並請大家尋找該異味,然後向團隊中的資深成員提出。一次處理一個異味,是逐步教導團隊成員成為更優秀程式設計師的好方法。