Java程序最容易犯的21種錯誤實例分析

字號:

1.Duplicated Code
    代碼重復(fù)幾乎是最常見的異味了。他也是Refactoring的主要目標之一。代碼重復(fù)往往來自于copy-and-paste的編程風格。與他相對應(yīng)OAOO是一個好系統(tǒng)的重要標志。
    2.Long method
    它是傳統(tǒng)結(jié)構(gòu)化的“遺毒”。一個方法應(yīng)當具有自我獨立的意圖,不要把幾個意圖放在一起。
    3.Large Class
    大類就是你把太多的責任交給了一個類。這里的規(guī)則是One Class One Responsibility.
    4.Divergent Change
    一個類里面的內(nèi)容變化率不同。某些狀態(tài)一個小時變一次,某些則幾個月一年才變一次;某些狀態(tài)因為這方面的原因發(fā)生變化,而另一些則因為其他方面的原因變一次。面向?qū)ο蟮某橄缶褪前严鄬Σ蛔兊暮拖鄬ψ兓喔綦x。把問題變化的一方面和另一方面相隔離。這使得這些相對不變的可以重用。問題變化的每個方面都可以單獨重用。這種相異變化的共存使得重用非常困難。
    5.Shotgun Surgery
    這正好和上面相反。對系統(tǒng)一個地方的改變涉及到其他許多地方的相關(guān)改變。這些變化率和變化內(nèi)容相似的狀態(tài)和行為通常應(yīng)當放在同一個類中。
    6.Feature Envy
    對象的目的就是封裝狀態(tài)以及與這些狀態(tài)緊密相關(guān)的行為。如果一個類的方法頻繁用get 方法存取其他類的狀態(tài)進行計算,那么你要考慮把行為移到涉及狀態(tài)數(shù)目最多的那個類。
    7.Data Clumps
    某些數(shù)據(jù)通常像孩子一樣成群玩耍:一起出現(xiàn)在很多類的成員變量中,一起出現(xiàn)在許多方法的參數(shù)中,這些數(shù)據(jù)或許應(yīng)該自己獨立形成對象。
    8.Primitive Obsession
    面向?qū)ο蟮男率滞ǔA?xí)慣使用幾個原始類型的數(shù)據(jù)來表示一個概念。譬如對于范圍,他們會使用兩個數(shù)字。對于Money,他們會用一個浮點數(shù)來表示。因為你沒有使用對象來表達問題中存在的概念,這使得代碼變的難以理解,解決問題的難度大大增加。好的習(xí)慣是擴充語言所能提供原始類型,用小對象來表示范圍、金額、轉(zhuǎn)化率、郵政編碼等等。
    9.Switch Statement
    基于常量的開關(guān)語句是OO 的大敵,你應(yīng)當把他變?yōu)樽宇悺tate或strategy.
    10. Parallel Inheritance Hierarchies
    并行的繼承層次是shotgun surgery的特殊情況。因為當你改變一個層次中的某一個類時,你必須同時改變另外一個層次的并行子類。