他們總在說重構,不過是重寫

大約是工作三年后妆够,職業(yè)倦怠毫無征兆的襲擊了我识啦,我莫名的感到:這一輩子就這樣了,每天的工作就是寫相同的代碼神妹,要命的是颓哮,自己在一個領域越精通,別人就越希望自己寫同樣的模塊——再快一點鸵荠。使我渡過這段時光的冕茅,是一些編程行業(yè)的老書,對于一個原本追求時髦技術的程序員來說蛹找,這樣的反轉令自己也很驚訝姨伤,其中就有這本《重構》,多年后庸疾,再次捧讀乍楚,希望自己如《黑客帝國》里的neo虚婿,回到源碼栗柒,去理解為何重構即不是傳說中的銀彈,卻又如此重要趣些。本篇為第一部分金顿,先來說說看待重構的三心臊泌。

回到源碼

拋掉對重構的敬畏之心


1. 重構給出了具體的操作方法。

重構不是建立在空中的構建思想揍拆,而是從實踐中歸納出來的操作手冊渠概。比如書中提到的要點之一:

事不過三,三要重構礁凡。

這條規(guī)則給出了重構時機的具體判斷方法:一個值高氮,一段代碼,相同的功能顷牌,如果重復出現(xiàn)了 兩次以上剪芍,就要提取為宏,變量窟蓝,方法罪裹,或模塊饱普,以方便重用。這不是建議状共,從代碼質量來說套耕,這是要求,也是開發(fā)者從小工到專家的必由之路峡继,事實上冯袍,除此之外,我不知道還有別的編寫代碼的方法碾牌。

2. 重構早已在開發(fā)者身邊康愤。

幾乎所有開發(fā)工具(Eclipse、Xcode...)都內置重構工具舶吗,他們的使用與代碼編輯器一樣簡單征冷。
如果你是一名iOS開發(fā)者,請參閱Xcode8 五分鐘重構起步

要對重構有耐心


由于重構不改變程序的外在表現(xiàn)誓琼,換而言之检激,即沒有加入任何新功能,因此項目經(jīng)理和老板不會主動要求開發(fā)者重構腹侣,甚至開發(fā)者提出時叔收,會招來反對:這個項目還剩一個星期,還有N個需求未實現(xiàn)筐带,現(xiàn)在你請求花費兩天時間今穿,什么都不做。開發(fā)者幾乎都承擔不了這樣的壓力伦籍,但是蓝晒,比延誤工期更嚴重的是,一個臃腫的帖鸦,不易修改的項目芝薇,最終將面臨添加需求困難,運行效率低下作儿,以致達不到可用的性能洛二,項目被砍掉,失敗幾乎不可避免攻锰。
那么作為開發(fā)者晾嘶,應該怎么處理這個矛盾呢?一個可行的方法是娶吞,把重構當做開發(fā)的一部分垒迂,一邊開發(fā)一邊重構,先快速的堆疊代碼妒蛇,實現(xiàn)功能机断,然后在功能不變的基礎上(寫好單元測試)楷拳,逐步重構。

庖丁解牛

對于吹噓重構有戒心


不要對別人吹噓重構

重構是一系列技法吏奸,就如一個優(yōu)秀木匠不會吹噓自己的刀法一樣欢揖,他表現(xiàn)自己的,永遠是作品奋蔚,開發(fā)者的作品就是程序她混,可擴展,少改動泊碑,高效产上,穩(wěn)健的程序,如果團隊里有人說:我現(xiàn)在不重構就沒法寫代碼蛾狗。大概他就真的只是不會寫代碼而已。
本人面試過一些剛畢業(yè)的開發(fā)者仪媒,在最后的提問環(huán)節(jié)沉桌,他提出的問題是:你們用什么開發(fā)環(huán)境?接著他還進一步強調自己一定要使用**Source Insight
**(一種Windows平臺流行的開發(fā)集成環(huán)境算吩,基于代碼語義管理代碼)留凭,否則就無法寫代碼。當時我有點錯愕偎巢,面對了解公司環(huán)境的寶貴機會蔼夜,不問福利待遇,不問升職通道压昼,卻糾結一個開發(fā)工具求冷。后來我發(fā)現(xiàn),很多初學者(也包括我自己)對工具有種癡迷窍霞,這當然也不是壞事匠题,但對自己用的開發(fā)工具夸夸其談,只能說明開發(fā)者的眼界不夠開闊但金,水平有局限韭山。

木匠不會夸自己錘子好使

當聽到有人將重構奉為靈丹妙藥,要格外小心冷溃,對此保持警惕钱磅。

有的技術領導人,動不動就說“下面我們進入重構階段了”似枕,仔細觀察發(fā)現(xiàn):每每他提出的時機盖淡,都是項目無法按時完成,某些功能實現(xiàn)不了時菠净,公司領導還無法反駁禁舷,懂點技術的都明白重構的重要性彪杉。

忽悠

那么,如何鑒別這種拿重構“忽悠”的行為呢牵咙?可以從以下幾點:

  1. 檢查要進入重構階段的團隊有沒有寫好對應的單元測試派近,這些測試是否自動測試。
  2. 是否為重構的項目新開版本管理庫洁桌,如果是渴丸,那這不是重構,而是 重寫另凌。
  3. 最終確認最開始要求添加的需求是否被完成谱轨。

最后這點看起來有點二,但實際中常常發(fā)生吠谢,團隊說土童,我開始重構啦,于是在大汗淋漓的兩周后工坊,團隊只能保證“重構”后的項目勉強運行献汗,項目進入了新階段——bug修復,然后就再也沒人提最初提出的新功能新需求了王污。


對于第一點罢吃,我們要理解重構的目標是

不改變代碼外在行為的前提下,對代碼進行修改昭齐,以改進程序的內部結構尿招。

如何保證代碼外在行為沒有改變?就得靠單元測試了阱驾,這里將單元測試作為代碼或重構的質量標準就谜,誰也不想一個正在運行的程序,被修改后引入一堆Bug里覆。
既然重構講究的是小步修改吁伺,每次改完后都要通過單元測試,那么第二點也很好理解了租谈,重建版本庫則意味著大段地搬移代碼篮奄,這個過程很難保證代碼質量,得到的很可能是 未經(jīng)驗證 的代碼割去。

既然重構是一種編程手法窟却,那么實踐中的重構是如何操作的?該如何避免重寫而**優(yōu)雅地重構呢呻逆?
下篇將通過一個具體的例子夸赫,體會重構的過程,請關注我的簡書咖城。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末茬腿,一起剝皮案震驚了整個濱河市呼奢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌切平,老刑警劉巖握础,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異悴品,居然都是意外死亡禀综,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進店門苔严,熙熙樓的掌柜王于貴愁眉苦臉地迎上來定枷,“玉大人,你說我怎么就攤上這事届氢∏分希” “怎么了?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵退子,是天一觀的道長贱迟。 經(jīng)常有香客問我,道長絮供,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任茶敏,我火速辦了婚禮壤靶,結果婚禮上,老公的妹妹穿的比我還像新娘惊搏。我一直安慰自己贮乳,他們只是感情好,可當我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布恬惯。 她就那樣靜靜地躺著向拆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪酪耳。 梳的紋絲不亂的頭發(fā)上浓恳,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天,我揣著相機與錄音碗暗,去河邊找鬼颈将。 笑死,一個胖子當著我的面吹牛言疗,可吹牛的內容都是我干的晴圾。 我是一名探鬼主播,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼噪奄,長吁一口氣:“原來是場噩夢啊……” “哼死姚!你這毒婦竟也來了人乓?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤都毒,失蹤者是張志新(化名)和其女友劉穎色罚,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體温鸽,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡保屯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了涤垫。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片姑尺。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蝠猬,靈堂內的尸體忽然破棺而出切蟋,到底是詐尸還是另有隱情,我是刑警寧澤榆芦,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布柄粹,位于F島的核電站,受9級特大地震影響匆绣,放射性物質發(fā)生泄漏驻右。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一崎淳、第九天 我趴在偏房一處隱蔽的房頂上張望堪夭。 院中可真熱鬧,春花似錦拣凹、人聲如沸森爽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽爬迟。三九已至,卻和暖如春菊匿,著一層夾襖步出監(jiān)牢的瞬間付呕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工跌捆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留凡涩,地道東北人。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓疹蛉,卻偏偏與公主長得像活箕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,554評論 2 349

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,790評論 25 707
  • 先說項目開發(fā)過程中團隊人員的分工協(xié)作育韩。 一 人員安排 畢業(yè)至今的大部分項目都是獨立完成克蚂,雖然也有和其他同事協(xié)作的時...
    SnowflakeCloud閱讀 10,756評論 3 59
  • LZ 16010C復合劑 SF/CD通用發(fā)動機油復合劑。 ? LZ 16010C以3.90%(重量)的加劑量可滿足...
    weeklybright閱讀 653評論 0 0
  • 清月起微寒筋讨, 梅花鬢上殘埃叭。 斜照一枝影, 尤隔錦竹簾悉罕。
    你予的暖閱讀 216評論 0 0
  • 這是李婷365日寫作計劃第129天的寫作內容 自律起初來自家庭教育 尚缺少自律的孩子赤屋,未必是因為父母管教不嚴。不少...
    婷婷玉立水墨畫閱讀 154評論 0 0