優(yōu)雅編程之這樣重構(gòu)代碼,你就“正痴蓿”了(十八)

開心一笑

【老婆問老公:你喜歡玩水還是喜歡玩火贝次?
老公:我喜歡玩火。
老婆:那以后彰导,飯就由你來煮蛔翅。
老公:不不不,我喜歡玩水位谋。
老婆:那以后的碗就由你來洗山析。
老公:瞬間石化√透福…】

【男孩:我感動天笋轨,感動地,怎么感動………
女孩:你要是敢動我赊淑,我爵政,我,我就打死你陶缺。
男孩:好好的一首情歌钾挟。……】

提出問題

項目開發(fā)中如何進行重構(gòu)饱岸?掺出?徽千?

解決問題

勵志圖片

這是《重構(gòu) 改善既有代碼的設(shè)計》中第15章我覺得比較重要的知識點。事實上只要看第1章的例子蛛砰,第24章個人建議可以略過罐栈,沒什么用.

重構(gòu)的第一步

每當我要進行重構(gòu)的時候黍衙,第一個步驟永遠是相同的泥畅。即建立一個可靠的測試環(huán)境。

分解和重組

代碼塊越小琅翻,代碼的功能就越容易管理位仁,代碼的處理和移動也就越輕松。

首先方椎,我得在代碼里找出函數(shù)內(nèi)的局部變量和參數(shù)聂抢。任何不會被修改的變量,都可以被我當成參數(shù)傳入新的函數(shù)棠众,至于會被修改的變量琳疏,就需要格外的小心。

正和一個傻瓜都能寫出計算機可以理解的代碼闸拿,唯有寫出人類容易理解代碼才是優(yōu)秀的程序員空盼。

去除臨時變量

利用多態(tài)取代

何為重構(gòu):

名詞:重構(gòu),對軟件內(nèi)部結(jié)構(gòu)的一種調(diào)整新荤,目的是在不改變揽趾,軟件可觀察行為的前提下,提高其可理解性苛骨,降低其修改成本篱瞎。

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

兩頂帽子

添加新功能以及重構(gòu)严衬。

添加新功能就添加新功能澄者,先不要去重構(gòu),重構(gòu)你就好好重構(gòu)瞳步,先不要去添加新的功能闷哆。

為何重構(gòu)

原因我就不說了,反正就他媽好单起。

何時重構(gòu)

三次法則:第一次做某件事時只管去做抱怔,第二次做類似的事時會產(chǎn)生反感,但無論如何還是可以去做嘀倒,第三次再做類似的事屈留,你就應(yīng)該重構(gòu)局冰。

  • 添加功能時重構(gòu)
  • 修補錯誤時重構(gòu)
  • 復(fù)審代碼時重構(gòu)

以下是一些壞代碼味道:符合下面就該重構(gòu)了

  • Duplicated Code(重復(fù)代碼)

  • Long Method(過長函數(shù))

  • Large Class(過大的類)

  • Long Parameter List(過長的參數(shù)列表)

  • Divergent Change(發(fā)散式變化):當你看著一個類說:如果新加入一個數(shù)據(jù)庫,我必須修改這三個函數(shù)灌危,如果新出現(xiàn)一種金融工具康二,我必須修改這四個函數(shù)。那么此時也許將這個對象分成兩個會更好勇蝙。

  • Shotgun Surgery(彈式修改):
    如果遇到哪種情況沫勿,你都必須在很多不同的類內(nèi)作出,許多小修改味混。那就是壞的味道产雹。這時候你需要把所有需要修改的代碼放進同一個類。如果眼下沒有合適的類可以安置這些代碼翁锡,就創(chuàng)建一個蔓挖。

  • Feature Envy(依戀情節(jié))

函數(shù)對某個類的興趣高過對自己所處類的興趣,是時候考慮這個函數(shù)到底應(yīng)該放在什么位置了馆衔。

對象技術(shù)的全部要點:這是一種將數(shù)據(jù)和對數(shù)據(jù)的操作行為包裝在一起的技術(shù)瘟判。

最根本的原則是,將總是一起變化的東西放在一塊角溃。

數(shù)據(jù)和引用這些數(shù)據(jù)的行為總是一起變化的拷获。

  • Data Clumps(數(shù)據(jù)泥團)

減少字段和參數(shù)的個數(shù),當然可以去除一些壞味道开镣。但更重要的是刀诬,一旦擁有新對象,你就有機會讓程序散發(fā)出一種芳香邪财。

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

將原本單獨存在的數(shù)據(jù)值替換為對象陕壹,從而走出傳統(tǒng)的洞窟,進入炙手可熱的對象世界树埠。

編寫小對象糠馆,如表示范圍的Range

  • Switch Statements(switch 驚悚現(xiàn)身)

面向?qū)ο蟪绦虻囊粋€最明顯特征:少用switch(或case)語句。

看到switch語句怎憋,就應(yīng)該考慮以多態(tài)來替換它又碌。

  • Parallel Inheritance Hierarchies(平行繼承體系)

每當你為某個類添加一個子類,必須也為另一個類相應(yīng)增加一個子類绊袋,大多數(shù)時候你會發(fā)現(xiàn)毕匀,某個繼承體系的類名前綴和另一個繼承體系的類名前綴完全相同。是時候分離癌别,為兩個繼承體系了皂岔。

  • Lazy Class(冗贅類)

你所創(chuàng)建的每個類,都得有人去理解它展姐,維護它躁垛,這些工作都是要花錢的剖毯。如果一個類的所得不值其所價,它就應(yīng)該消失教馆。

  • Speculative Generality(夸夸其談未來性)

無用的抽象類逊谋,無用的預(yù)留參數(shù)。

  • Temporary Field(令人迷惑的暫時字段)

某個類的實例變量僅為某種特定情況來設(shè)土铺,某個函數(shù)的參數(shù)胶滋,為了方便聲明為某個類的成員,而僅僅在這一個函數(shù)中使用舒憾。

  • Message Chains(過度耦合的函數(shù))

現(xiàn)一個對象請求另一個對象镀钓,在向后者請求另一個對象。

  • Middle Man(中間人)

你也許會看到某個類接口镀迂,有一半的函數(shù)都委托給其他類,這樣就是過度運用唤蔗。

無用的委托探遵,過多的中間層。

  • Inappropriate Intimacy(鉀昵關(guān)系)

類不要過度親密妓柜,一個類過一關(guān)注另一個類的成員箱季。

  • Alternative Classes with Different Interfaces(曲同工的類)

兩個函數(shù)做同一件事,卻有著不同的類名

  • Incomplete Library Class(不完美的類庫)

  • Data Class(純稚的數(shù)據(jù)類)

或許可以通過移動方法把和這個數(shù)據(jù)對相關(guān)的操作一過來棍掐。

  • Refused Bequest(被拒絕的遺贈)

  • Comments(過多的注釋)

讀書感悟

來自幾米《月亮忘記了》

  • 每個人都有一個像月亮一樣的愛人藏雏,因為這個愛人,我們擁有守護的能力作煌。

  • 記住的掘殴,是不是永遠不會消失? 我守護如泡沫般脆弱的夢境粟誓, 快樂才剛開始奏寨,悲傷卻早已潛伏而來。

  • 生命中鹰服,不斷地有得到和失落病瞳。于是,看不見的悲酷,看見了套菜;遺忘的,記住了设易。
    生命中逗柴,不斷地有人離開或進入。于是亡嫌,看見的嚎于,看不見了掘而;記住的,遺忘了于购。
    然而袍睡,看不見的,是不是就等于不存在肋僧?記住的斑胜,是不是就不會消失?

其他

如果有帶給你一絲絲小快樂嫌吠,就讓快樂繼續(xù)傳遞下去止潘,歡迎轉(zhuǎn)載,點贊辫诅,頂凭戴,歡迎留下寶貴的意見,多謝支持炕矮!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末么夫,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子肤视,更是在濱河造成了極大的恐慌档痪,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件邢滑,死亡現(xiàn)場離奇詭異腐螟,居然都是意外死亡,警方通過查閱死者的電腦和手機困后,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門乐纸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人操灿,你說我怎么就攤上這事锯仪。” “怎么了趾盐?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵庶喜,是天一觀的道長。 經(jīng)常有香客問我救鲤,道長久窟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任本缠,我火速辦了婚禮斥扛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己稀颁,他們只是感情好芬失,可當我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著匾灶,像睡著了一般棱烂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上阶女,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天颊糜,我揣著相機與錄音,去河邊找鬼秃踩。 笑死衬鱼,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的憔杨。 我是一名探鬼主播鸟赫,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼芍秆!你這毒婦竟也來了惯疙?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤妖啥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后对碌,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體荆虱,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年朽们,在試婚紗的時候發(fā)現(xiàn)自己被綠了怀读。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡骑脱,死狀恐怖菜枷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情叁丧,我是刑警寧澤啤誊,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站拥娄,受9級特大地震影響蚊锹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜稚瘾,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一牡昆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧摊欠,春花似錦丢烘、人聲如沸柱宦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽掸刊。三九已至,卻和暖如春狐史,著一層夾襖步出監(jiān)牢的瞬間痒给,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工骏全, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留苍柏,地道東北人。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓姜贡,卻偏偏與公主長得像试吁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子楼咳,可洞房花燭夜當晚...
    茶點故事閱讀 44,629評論 2 354

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

  • 《重構(gòu)》讀書筆記 總覽 第一部分 第一章從實例程序出發(fā)熄捍,展示設(shè)計的缺陷,對其重構(gòu)可以了解重構(gòu)的過程和方法母怜。 第二部...
    白樺葉閱讀 2,395評論 2 5
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,080評論 25 707
  • 蘇格拉底的兩個學生余耽,柏拉圖和色諾芬都寫過題為“會飲篇”的哲學著作。當然他們寫的不是同一次“會飲”苹熏,這某種程度說明碟贾,...
    007號堂吉訶德閱讀 191評論 1 1
  • 好友薄荷突然發(fā)來信息,說她要和C先生結(jié)婚了轨域,我有點驚訝又覺得意料之中袱耽。我回過去,“終于要把自己嫁出去了啊干发,我當伴娘...
    秋小晨閱讀 393評論 6 1
  • 沈陽朱巨,作為全國大型城市之一,也是東北經(jīng)濟最繁榮的地區(qū)枉长!2017年1月5日上午11:30左右冀续,乘坐西部航空PN267...
    辣椒醬紫閱讀 155評論 0 0