今天來節錄<<重構-改善既有程式的設計>>書中提到的程式碼壞味道。
- Duplicated Code (重複的程式碼)
- Long Method (過長函式)
- Large Class (過大類別)
- Long Parameters List (過長參數列)
- Divergent Change (發散式變化)
- Shotgun Surgery (霰彈式修改)
- Feature Envy (依戀情節)
- Data Clumps (資料泥團)
- Primitive Obsession (基本型別偏執)
- Switch Statements (switch驚悚現身)
- Parallel Inheritance Hierarchies (平行繼承體系)
- Lazy Class (冗員類別)
- Speculative Generality (夸夸其談未來性)
- Temporary Field (令人迷惑的暫存欄位)
- Message Chains (過度耦合的訊息鏈)
- Middle Man (中間轉手人)
- Inappropriate Intimacy (狎暱關係)
- Alternative Classes with Different Interfaces (異曲同工的類別)
- Incomplete Library Class (不完美的程式庫類別)
- Data Class (純稚的資料類別)
- Refused Bequest (被拒絕的遺贈)
- Comments (過多的註釋)
首先簡單節錄前八個壞味道:
1.
Duplicated Code (重複的程式碼)
最單純的情況就是同一個類別(Class)內的兩個函式函有相同的實作內容
2.
Long Method (過長函式)
不熟悉物件導向的人,常常覺得物件程式中只有無窮無盡的委託(delegation),根本沒有進行任何計算。和此類程式共同生活數年之後,你才會發現這些小小函式有多大的價值。解釋能力、共享能力、選擇能力都是由小型函式支援的。
3.
Large Class (過大類別)
想利用單一類別(Class)做太多事情,其內往往就會出現太多instance變數。一旦如此,Duplicated Code也就解踵而至了。
4.
Long Parameters List (過長參數列)
以前學C語言,老師教我們:把函式所需的所有東西都以參數傳遞進去。這可以理解,因為除此之外就只能選擇全域資料,而全域資料是邪惡的東西。有了物件,你只需傳給它足夠的東西,讓函式從中獲得自己所需要的所有東西就行了。
5.
Divergent Change (發散式變化)
一旦需要修改,我們希望能夠跳到系統的某一點,只在該處作修改。如果不能做到這點,你就嗅出兩種緊密相關的刺鼻味道中的一種了。
如果某個class經常因為不同的原因在不同的方向上發生變化,Divergent Change這個壞味道就出現了。例如:當你看著一個class說:『呃,如果加入一個資料庫,我必須修改這三個函式;如果新出現一種金融工具,我必須修改這四個函式』。
6.
Shotgun Surgery (霰彈式修改)
類似Divergent Chane,但恰恰相反。Divergent Change是指「一個class受多種變化的影響」,Shotgun Surgery則是指「一種變化引發多個classes相應修改」。
7.
Feature Envy (依戀情節)
我們看到某個函式為了計算某個值,從另一個物件那兒呼叫幾呼半打的取值函式(getting
method)。
8.
Data Clumps (資料泥團)
兩個classes內的相同欄位(field)、許多函式署名式(signature)中的相同參數。
---
借回來五天,利用交通和空閒時間看,已經讀了140頁。
如果已經碰過程式有幾年經驗,這本書應該能講到你的心坎裡。但是如果你是學程式初學者應該會看得"霧颯颯"。
先聞出壞味道會比較清楚重構的時機
沒有留言:
張貼留言