重構(gòu)

重構(gòu)(名詞):對軟件內(nèi)部結(jié)構(gòu)的一種調(diào)整沛鸵,目的是在不改變軟件可觀察行為的前提下制轰,提高其可理解性。降低其修改成本均澳。

重構(gòu)(動詞):使用一系列重構(gòu)手法恨溜,在不改變軟件可觀察行為的前提下,調(diào)整其結(jié)構(gòu)找前。

一糟袁、重構(gòu),第一個案例

如果你發(fā)現(xiàn)自己需要為程序添加一個特性躺盛,而代碼結(jié)構(gòu)使你無法很方便地達成目的项戴,那就先重構(gòu)那個程序,使特性的添加比較容易進行槽惫,然后再添加特性周叮。

重構(gòu)前,先檢查自己是否有一套可靠的測試機制界斜。這些測試必須有自我檢驗?zāi)芰Α?/b>

進行重構(gòu)的時候仿耽,我們需要依賴測試,讓它告訴我們是否引入了bug各薇。好的測試是重構(gòu)的根本项贺。

重構(gòu)步驟的本質(zhì):重構(gòu)技術(shù)就是以微小的步伐修改程序。如果你犯下錯誤峭判,很容易便可發(fā)現(xiàn)它开缎。

任何一個傻瓜都能寫出計算機可以理解的代碼。唯有寫出人類容易理解的代碼林螃,才是優(yōu)秀的程序員奕删。

二、重構(gòu)原則

為何重構(gòu):1疗认、重構(gòu)改進軟件設(shè)計完残;2砌滞、重構(gòu)使軟件更容易理解;3坏怪、重構(gòu)幫助找到bug;4绊茧、重構(gòu)提高編程速度铝宵;

何時重構(gòu):1、三次法則(事不過三华畏,三則重構(gòu))鹏秋;2、添加功能時重構(gòu)亡笑;3侣夷、修補錯誤時重構(gòu);4仑乌、復(fù)審代碼時重構(gòu)百拓;

間接層是把雙刃劍,間接層的價值:1晰甚、允許邏輯共享衙传;2、分開解釋意圖和實現(xiàn)厕九;3蓖捶、隔離變化;4扁远、封裝條件邏輯俊鱼;

三、代碼的壞味道

1畅买、重復(fù)代碼(Duplicated Code)

2铁材、過長函數(shù)(Long Method)

3、過大的類(Large Class)

4绢涡、過長參數(shù)列(Long Parameter List)

5瞄桨、發(fā)散式變化(Divergent Change)

6、散彈式修改(Shotgun Surgery)

7洒宝、依戀情節(jié)(Feature Envy)

8购公、數(shù)據(jù)泥團(Data Clumps)

9、基本類型偏執(zhí)(Primitive Obsession)

10雁歌、switch驚悚現(xiàn)身(Switch Statements)

11宏浩、平行繼承體系(Parallel Inheritance Hierarchies)

12、冗贅類(Lazy?Class)

13靠瞎、夸夸其談未來性(Speculative Generality)

14比庄、令人迷惑的暫時字段(Temporary Field)

15求妹、過度耦合的消息鏈(Message Chains)

16、中間人(Middle Man)

17佳窑、狎昵關(guān)系(Inappropriate?Intimacy)

18制恍、異曲同工的類(Alternative?Classes?with?Different?Interfaces)

19、不完美的庫類(Incomplete?Library?Class)

20神凑、純稚的數(shù)據(jù)類(Data Class)

21净神、被拒絕的遺贈(Refused Bequest)

22、過多的注釋(Comments):當你感覺需要撰寫注釋時溉委,請先嘗試重構(gòu)鹃唯,試著讓所有注釋都變得多余。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瓣喊,一起剝皮案震驚了整個濱河市坡慌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌藻三,老刑警劉巖洪橘,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異趴酣,居然都是意外死亡梨树,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門岖寞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抡四,“玉大人,你說我怎么就攤上這事仗谆≈秆玻” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵隶垮,是天一觀的道長藻雪。 經(jīng)常有香客問我,道長狸吞,這世上最難降的妖魔是什么勉耀? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮蹋偏,結(jié)果婚禮上便斥,老公的妹妹穿的比我還像新娘。我一直安慰自己威始,他們只是感情好枢纠,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著黎棠,像睡著了一般晋渺。 火紅的嫁衣襯著肌膚如雪镰绎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天木西,我揣著相機與錄音畴栖,去河邊找鬼。 笑死八千,一個胖子當著我的面吹牛驶臊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播叼丑,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼扛门!你這毒婦竟也來了鸠信?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤论寨,失蹤者是張志新(化名)和其女友劉穎星立,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體葬凳,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡绰垂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了火焰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片劲装。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖昌简,靈堂內(nèi)的尸體忽然破棺而出占业,到底是詐尸還是另有隱情,我是刑警寧澤纯赎,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布谦疾,位于F島的核電站,受9級特大地震影響犬金,放射性物質(zhì)發(fā)生泄漏念恍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一晚顷、第九天 我趴在偏房一處隱蔽的房頂上張望峰伙。 院中可真熱鬧,春花似錦音同、人聲如沸词爬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽顿膨。三九已至锅锨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間恋沃,已是汗流浹背必搞。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留囊咏,地道東北人恕洲。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像梅割,于是被迫代替她去往敵國和親霜第。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容