重構(gòu)與收拾屋子


為什么收拾屋子?

住酒店抄罕,有服務(wù)生幫我們收拾房間允蚣,在家需要自己收拾,因為自己還要住很長時間呆贿。屋子干凈了嚷兔,還是有好處的,東西就好找了做入,哪些東西放的位置不對冒晰,也更容易識別出來。

我們看看《[重構(gòu)][refactor]》中Martin Fowler對“重構(gòu)”的定義:

名詞定義:對軟件內(nèi)部結(jié)構(gòu)的一種調(diào)整竟块,目的是在不改變軟件可觀察行為的前提下壶运,提高其可理解性,降低其修改成本浪秘。

定義中給出了重構(gòu)的兩個目的(收益):

  1. 提高可理解性
  2. 降低修改成本

代碼編寫完成后蒋情,自己或者他人還會維護(hù)較長一段時間。重構(gòu)耸携,是期望代碼可以更多的被復(fù)用棵癣,有更長的服役時間。

如何收拾屋子违帆?

根據(jù)屋子的布置(結(jié)構(gòu))浙巫,每件物品都有它應(yīng)該放置的位置,發(fā)現(xiàn)不在位置上刷后,就調(diào)整調(diào)整的畴。

重構(gòu)是對軟件內(nèi)部結(jié)構(gòu)的一種調(diào)整。好的軟件在滿足系統(tǒng)功能正確性尝胆、性能等要素同時丧裁,還需考慮軟件的擴(kuò)展性、伸縮性和可讀性含衔。所以它應(yīng)該是有架構(gòu)的煎娇,體現(xiàn)為橫向切分的不同層次和縱向切分的不同模塊二庵,及更細(xì)粒度的類、方法缓呛、函數(shù)催享。重構(gòu)就是根據(jù)軟件本身應(yīng)該的結(jié)構(gòu),對代碼元素進(jìn)行調(diào)整哟绊,放到合適的位置因妙。

什么時候收拾?

發(fā)現(xiàn)屋子臟了票髓、亂了就收拾收拾攀涵,工作忙,就周末收拾洽沟,工作輕松些就每天順手收拾以故。但是房子臟,那是欠的債裆操,遲早需要還的怒详。

伴隨著開發(fā)的過程,重構(gòu)應(yīng)該是個習(xí)慣跷车,發(fā)現(xiàn)代碼有壞味道了棘利,就及時消除掉。交付壓力太大時朽缴,就稍微緩緩善玫,等稍能喘口氣,就趕緊把債還掉密强,不然積少成多茅郎,可能就很難收拾了。

Martin Fowler給出了四個重構(gòu)時機:

  • 產(chǎn)生重復(fù)代碼時或渤,
  • 新增功能之
  • 修改故障之
  • 代碼走查之

Kent Beck提出的XP(eXtreme Programming)中系冗,TDD實踐更是把重構(gòu)作為開發(fā)過程中的一部分:


Test Driven Development

大掃除

逢年過節(jié),你會來個大掃除薪鹦,徹底把屋子調(diào)整調(diào)整掌敬。

時間久了,新人多了池磁,交付壓力大了奔害,代碼難免會產(chǎn)生一些腐化,這些可以通過集中重構(gòu)地熄,徹底清洗清洗华临。

裝修
發(fā)現(xiàn)房間布置,格調(diào)有點跟不上時代端考,需要整的大些雅潭,就是裝修了揭厚。要看自己有沒有地兒住,有沒有時間折騰扶供。

當(dāng)系統(tǒng)新增功能改動很大筛圆;當(dāng)系統(tǒng)性能成為瓶頸,無法忍受椿浓;當(dāng)代碼穿著一層層補丁貼成的外衣顽染,仍到處漏風(fēng)時,此時縫縫補補此時已無濟(jì)于事轰绵,需要更大的調(diào)整,才能根除這些問題尼荆。當(dāng)然此時系統(tǒng)已經(jīng)上線左腔,用戶嗷嗷待哺,你需要有替代方案過度捅儒,需要爭取時間調(diào)整液样。

另一則小故事:

一個建筑隊,全國各地到處跑巧还,住的是一個茅草屋鞭莽。遮風(fēng)避雨是沒有問題的,只是每到一地都要重蓋麸祷,一到下大雨還到處漏水澎怒。修修補補的辦法總有的,但總是很狼狽阶牍。有一天喷面,有人告訴工程隊,可以用可組合的鐵框為骨架走孽,彩鋼為夾層惧辈,這樣既可以連續(xù)拆裝,節(jié)省成本磕瓷,房子也結(jié)實牢固盒齿。

工人們開始擔(dān)心了:“怎么組裝啊,看上去好麻煩困食!”边翁。工程隊的老人也替工頭擔(dān)心,“那得花多少錢啊”陷舅,“會不會住不習(xí)慣”倒彰,工頭出去考察了一番,回來一狠心莱睁,整了一套待讳,雖然過程有些費勁芒澜,結(jié)果收益還是杠杠的。后來大家?guī)缀醵纪嗽?jīng)住過茅草屋创淡。

當(dāng)然痴晦,這里講的不再是重構(gòu)了,這種推倒重來的做法琳彩,我們叫它再工程(re-engineering)誊酌。與重構(gòu)相比,他的風(fēng)險更大露乏,成本更高碧浊。但所謂高風(fēng)險,高回報瘟仿,如果它能帶來更大的收益箱锐,甚至顛覆性創(chuàng)新,我們也值得去做劳较。

再工程不是本文討論的重點驹止,打住观蜗!

對于最具挑戰(zhàn)性的遺留代碼重構(gòu)臊恋,請移步到《淺談遺留代碼的重構(gòu)
[refactor]:https://book.douban.com/subject/4262627

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市墓捻,隨后出現(xiàn)的幾起案子抖仅,更是在濱河造成了極大的恐慌,老刑警劉巖砖第,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件岸售,死亡現(xiàn)場離奇詭異,居然都是意外死亡厂画,警方通過查閱死者的電腦和手機凸丸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來袱院,“玉大人屎慢,你說我怎么就攤上這事『雎澹” “怎么了腻惠?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長欲虚。 經(jīng)常有香客問我集灌,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任欣喧,我火速辦了婚禮腌零,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘唆阿。我一直安慰自己益涧,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布驯鳖。 她就那樣靜靜地躺著闲询,像睡著了一般。 火紅的嫁衣襯著肌膚如雪浅辙。 梳的紋絲不亂的頭發(fā)上扭弧,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機與錄音记舆,去河邊找鬼寄狼。 笑死,一個胖子當(dāng)著我的面吹牛氨淌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播伊磺,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼盛正,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了屑埋?” 一聲冷哼從身側(cè)響起豪筝,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎摘能,沒想到半個月后续崖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡团搞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年严望,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逻恐。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡像吻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出复隆,到底是詐尸還是另有隱情拨匆,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布挽拂,位于F島的核電站惭每,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏亏栈。R本人自食惡果不足惜台腥,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一宏赘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧览爵,春花似錦置鼻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至俱济,卻和暖如春嘶是,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蛛碌。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工聂喇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蔚携。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓希太,卻偏偏與公主長得像,于是被迫代替她去往敵國和親酝蜒。 傳聞我的和親對象是個殘疾皇子誊辉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,592評論 2 353

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,072評論 25 707
  • “整潔的代碼簡單直接。整潔的代碼如同優(yōu)美的散文亡脑。整潔的代碼從不隱藏設(shè)計者的意圖堕澄,充滿了干凈利落的抽象和直截了當(dāng)?shù)目?..
    活這么大就沒飽過閱讀 1,683評論 0 4
  • 背景 《重構(gòu)》誕生至今有近17個年頭了,日常開發(fā)中大家談到重構(gòu)霉咨,要么非常隨意蛙紫,認(rèn)為重構(gòu)就是改代碼;要么非常謹(jǐn)慎途戒,把...
    李永順閱讀 3,399評論 0 18
  • 本文把程序員所需掌握的關(guān)鍵知識總結(jié)為三大類19個關(guān)鍵概念坑傅,然后給出了掌握每個關(guān)鍵概念所需的入門書籍,必讀書籍喷斋,以及...
    dle_oxio閱讀 11,097評論 6 244
  • 一個80歲的老頭裁蚁,一個倔強的老頭,一生都在男女情愛中徜徉继准!即使自己已經(jīng)知道再談性卻無力時枉证,他仍然執(zhí)著的寫起男女之間...
    lsm198318閱讀 186評論 0 0