亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

重構

2019-11-14 13:51:32
字體:
來源:轉載
供稿:網友

重構-改善既有代碼的設計   

  --摘錄

1.1 何謂重構
  重構不只是整理代碼,它提供了一種更高效且受控的代碼整理技術。運用重構技術后,我發現自己對代碼的整理比以前更有效率。
  重構的目的是使軟件更容易被理解和修改。

  使用重構技術開發軟件時,你把自己的趕時間分配給兩種不同的行為:添加新功能,以及重構(兩頂帽子)。添加新功能時,你不應該修改既有代碼,只管添加新功能。重構時,你就不能再添加功能,只管改進程序結構。
  軟件開發過程中,你可能會發現自己經常變換帽子。首先你會嘗試添加新功能,然后會意識到:如果把程序結構改一下,功能的添加會容易得多。于是你換一頂帽子,做一會兒重構工作。程序結構調整好后,你又換上原先的帽子,繼續添加新功能。新功能正常工作
后,你又發現自己的編碼造成程序難以理解,于是又換上重構帽子……整個過程或許只花十分鐘,但無論何時你都應該清楚自己戴的是哪一頂帽子。

1.2 為何重構
a.重構改進軟件設計
  如果沒有重構,程序的設計會逐漸腐敗變質。當人們只為短期目的,或是在完全理解整體設計之前,就貿然修改代碼,程序將逐漸失去自己的結構,程序員愈來愈難通過閱讀源碼而理解原來的設計。重構很像在整理代碼,你所做的就是讓所有東西回到應處的位置上
。代碼結構的流失是累積性的。愈難看出代碼所代表的設計意圖,就愈難保護其中設計,于是該設計就腐敗得愈快。經常性的重構可以幫助代碼自己有的形態。

  完成同樣一件事,設計不良的程序往往需要更多代碼,這常常是因為代碼在不同的地方使用完全相同的語句做同樣的事。因此改進設計的一個重要方向就是消除重復代碼。這個動作的重要性在于方便未來的修改。代碼量減少并不會使系統運行更快,因為這對程序的
運行軌跡幾乎沒有任何明顯影響。然而代碼量減少將使未來可能的程序修改動作容易得多。代碼愈多,正確的修改就愈困難,因為有更多代碼需要理解。你在這兒做了點修改,系統卻不如預期那樣工作,是因為你沒有修改另一處——那兒的代碼做著幾乎完全一樣的事情
,只是所處環境略有不同。如果消除重復代碼,你就可以確定所有事物和行為在代碼中只表述一次,這正是優秀設計的根本。

b.重構使軟件更容易理解
  所謂程序設計,很大程度上就是與計算機交談:你編寫代碼告訴計算機做什么事,它的響應則是精確按照你的指示行動。你得及時填補“想要它做什么”和“告訴它做什么”之間的縫隙。這種編程模式的核心就是“準確說出我所要的”。除了計算機外,你的源碼還
有其他讀者:幾個月后可能會有另一位程序員嘗試讀懂你的代碼并做一些修改。我們很容易忘記這第二位讀者,但他才是最重要的。計算機是否多花了幾個小時來編譯,又有什么關系呢?如果一個程序員花費一周時間來修改某段代碼,那才要命呢——如果他理解了你的
代碼,這個修改原本只需一小時。

  問題在于,當你努力讓程序運轉的時候,不會想到未來出現的那個開發者。是的,我們應該改變一下開發節奏,對代碼做適當修改,讓代碼變得更易理解。重構可以幫助我們讓代碼更易讀。一開始進行重構時,你的代碼可以正常運行,但結構不夠理想。在重構上花
一點點時間,就可以讓代碼更好地表達自己的用途。這種編程模式的核心就是“準確說出我所要的”。

  關于這一點,我沒必要表現得如此無私。很多時候那個未來的開發者就是我自己。此時重構就顯得尤其重要了。我是個很懶惰的程序員,我的懶惰表現形式之一就是:總是記不住自己寫過的代碼。事實上,對于任何能夠立刻查閱的東西,我都故意不去記它,因為我
怕把自己的腦袋塞爆。我總是盡量把該記住的東西寫進程序時,這樣我就不必記住它了。

  這種可理解性還有另一方面的作用。我利用重構來協助我理解不熟悉的代碼。每當看到不熟悉的代碼,我必須試著理解其用途。我會真正動手修改代碼,讓它更好地反映出我的理解,然后重新執行,看它是否仍然正常動作,以此檢驗我的理解是否正確。

  一開始我所做的重構都像這樣停留在細枝末節上。隨著代碼漸趨簡潔,我發現自己可以看到一些以前看不到的設計層面的東西。研究代碼時我發現,重構把我帶到更高的理解層次上。

c.重構幫助找到bug
  Kent Beck經常形容自己的一句話:“我不是個偉大的程序員,我只是個有著一些優秀習慣的好程序員。”重構能夠幫助我更有效地寫出強健的代碼。

d.重構提高編程速度
  終于,前面的一切都歸結到了這最后一點:重構幫助你更快速地開發程序。
  聽起來有點違反直覺。當我談到重構,人們很容易看出它能夠提高質量。改善設計、提升可讀性、減少錯誤,這些都是提高質量。但這難道不會降低開發速度嗎?
  我絕對相信:良好的設計是快速開發的根本——事實上,擁有良好設計才可能做到快速開發。如果沒有良好設計,或許某一段時間內你的進展迅速,但惡劣的設計很快就讓你的速度慢下來。你會把時間花在調試上面,無法添加新功能。修改愈來愈長,因為你必須花
愈來愈多的時間去理解系統、尋找重復代碼。隨著你給最初程序打上一個又一個的補丁,新特性需要更多代碼才能實現。真是個惡性循環。
  良好設計是維持軟件開發速度的根本。重構可以幫助你更快速地開發軟件,因為它阻止系統腐敗變質,它甚至還可以提高設計質量。

1.3 何時重構
  當我談論重構時,常常有人問我應該怎樣安排重構時間表。我們是不是應該每兩個月就專門安排兩個星期來進行重構呢?
  幾乎任何情況下我都反對專門撥出時間進行重構。在我看來,重構本來就不是一件應該特別撥出時間做的事情,重構應該隨時隨地進行。你不應該為重構而重構,你之所以重構,是因為你想做別的什么事,而重構可以幫助你把那些事做好。

三次法則
  Don Roberts給了我一條準則:第一次做某件事時只管去做;第二次做類似的事會產生反感,但無論如何還是可以去做;第三次再做類似的事,你就應該重構。即事不過三,三則重構。

a.添加功能時重構
  最常見的重構時機就是我想給軟件添加新特性的時候。此時,重構的直接原因往往是為了幫助我理解需要修改的代碼——這些代碼可能是別人寫的,也可能是我自己寫的。無論何時,只要我想理解代碼所做的事,我就會問自己:是否能對這段代碼進行重構,使我能
更快地理解它。然后我就會重構。之所以這么做,部分原因是為了讓我下次再看這段代碼時容易理解,但最主要的原因是:如果在前進過程中把代碼結構理清,我就可以從中理解更多東西。
  在這里,重構的另一個原動力是:代碼的設計無法幫助我輕松添加我所需要的特性。我看著設計,然后對自己說:“如果用某種方式來設計,添加特性會簡單得多。”這種情況下我不會因為自己過去的錯誤而懊惱——我用重構來彌補它。之所以這么做,部分原因是
為了讓未來增加新特性時能夠更輕松一些,但最主要的原因還是:我發現這是最快捷的途徑。重構是一個快速流暢的過程,一旦完成重構,新特性的添加就會更快速、更流暢。

b.修補錯誤時重構
  調試過程中運用重構,多半是為了讓代碼更具可讀性。當我看著代碼并努力理解它的時候,我用重構幫助加深自己的理解。我發現以這處程序來處理代碼,常常能夠幫助我找出bug。你可以這么想:如果收到一份錯誤報告,這就是需要重構的信號,因為顯然代碼還不
夠清晰——沒有清晰到讓你能一眼看出bug。

c.復審代碼時重構
  最好是一個復審者搭配一個原作者,共同處理這些代碼。復審者提出修改建議,然后兩人共同判斷這些修改是否能夠通過重構輕松實現。

為什么重構有用?
  對于今天的工作,我了解得很充分;對于明天的工作,我了解得不夠充分。但如果我純粹只是為今天工作,明天我將完全無法工作。
  重構是一條擺脫困境的道路。如果你發現昨天的決定已經不適合今天的情況,放心改變這個決定就是,然后你就可以完成今天的工作了。明天,回頭看今天的理解也許覺得很幼稚,那時你還可以改變你的理解。
  是什么讓程序如此難以相與?眼下我能想起下述四個原因,它們是:
    1)難以閱讀的程序,難以修改;
    2)邏輯重復的程序,難以修改;
    3)添加新行為時需要修改已有代碼的程序,難以修改;
    4)帶復雜條件邏輯的程序,難以修改。

  因此,我們希望程序:(1)容易閱讀;(2)所有邏輯都只在唯一地點指定;(3)新的改動不會危及現有行為;(4)盡可能簡單表達條件邏輯。
  重構是這樣一個過程:它在一個目前可運行的程序上進行,在不改變程序行為的前提下使其具備上述美好性質,使我們能夠保持高速開發,從而增加程序的價值。

1.4 何時不該重構
  重寫(而非重構)的一個清楚訊號就是:現有代碼根本不能正常動作。你可能只是試著做點測試,然后就發現代碼中滿是錯誤,根本無法穩定運作。記住,重構之前,代碼必須起碼能夠在大部分情況下正常運作。
  另外,如果項目已近最后期限,你也應該避免重構。

 

 

重構與設計
  重構改變了預先設計的角色。如果沒有重構,你就必須保證預先做出的設計正確無誤,這個壓力太大了。這意味如果將來需要對原始設計做任何修改,代價都將非常高昂。因此你需要把更多時間和精力放在預先設計上,以避免日后修改。
  如果你選擇重構,問題的重點就轉變了。你仍然做預先設計,但是不必一定找出正確的解決方案。此刻的你只需要得到一個足夠合理的解決方案就夠了。你很肯定地知道,在實現這個初始解決方案的時候,你對問題的理解也會逐漸加深,你可能會察覺最佳解決方案和你當初設想的有些不同。只要有重構這把利器在手,就不成問題,因為重構讓日后的修改成本不再高昂。

 

  重構可以帶來更簡單的設計,同時又不損失靈活性,這也降低了設計過程的難度,減輕了設計壓力。一旦對重構帶來的簡單性有更多感受,你甚至可以不必再預先思考前述所謂的靈活方案——一旦需要它,你總有足夠的信心去重構。

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
午夜精品久久久久久久99热| 成人免费淫片视频软件| 久久久成人的性感天堂| 亚洲成色999久久网站| 国产一区二区三区直播精品电影| 国产精品福利无圣光在线一区| 成人av色在线观看| 热久久这里只有精品| 国产精品久久久久久久天堂| 亚洲国产婷婷香蕉久久久久久| 国产网站欧美日韩免费精品在线观看| 国产美女被下药99| 久久人人爽人人爽人人片av高请| 国产福利精品在线| 亚洲成人教育av| 亚洲第一天堂无码专区| 精品国产一区av| 麻豆一区二区在线观看| 国内精品美女av在线播放| 欧美高清在线播放| 成人有码在线播放| 日韩av中文字幕在线播放| 欧美亚洲成人xxx| 久热国产精品视频| 日韩中文第一页| 国产亚洲aⅴaaaaaa毛片| 九九热精品视频| 免费97视频在线精品国自产拍| 国产亚洲aⅴaaaaaa毛片| 欧美另类极品videosbest最新版本| 狠狠色狠狠色综合日日五| 国产欧亚日韩视频| 色综合导航网站| 国产精品69av| 久久久久久久久爱| 91精品国产91久久久久| 欧美精品激情在线| 海角国产乱辈乱精品视频| 亚洲激情视频网站| 国产精品欧美亚洲777777| 91av视频在线播放| 久久久女人电视剧免费播放下载| 亚洲国产成人av在线| 欧美二区乱c黑人| 亚洲综合在线小说| 日韩在线观看免费av| 欧美裸体xxxx极品少妇| 欧美在线一区二区三区四| 国产欧美一区二区三区在线看| 久久久久久久久久久人体| 欧美日韩电影在线观看| 日韩av电影手机在线观看| 69久久夜色精品国产69乱青草| 高清欧美性猛交| 国模精品视频一区二区| 欧美中文字幕视频| 日韩欧美在线观看视频| 亚洲性xxxx| 欧美香蕉大胸在线视频观看| 国产一区二区三区精品久久久| 成人激情春色网| 亚洲国产精彩中文乱码av在线播放| 亚洲成人久久网| 欧美国产精品va在线观看| 国产精品国内视频| 综合av色偷偷网| 中文字幕国产日韩| 欧美大片免费观看在线观看网站推荐| 亚洲精品日韩激情在线电影| 狠狠做深爱婷婷久久综合一区| 亚洲一区美女视频在线观看免费| 庆余年2免费日韩剧观看大牛| 日韩国产在线播放| 日韩欧美在线视频免费观看| 日韩视频在线观看免费| 91精品国产电影| 韩国视频理论视频久久| 日韩欧中文字幕| 久久久中精品2020中文| 日本最新高清不卡中文字幕| 中文字幕精品久久久久| 成人黄色在线观看| 欧美日韩亚洲精品内裤| 永久免费毛片在线播放不卡| 亚洲精品动漫100p| 国产一区二区丝袜高跟鞋图片| 日韩美女av在线免费观看| 69视频在线播放| 亚洲视频777| 日韩免费观看在线观看| 亚洲一区二区中文| 欧美精品激情视频| 97国产成人精品视频| 午夜精品www| 亚洲www在线| 国产欧美中文字幕| 国产精品视频在线观看| 欧美劲爆第一页| 日韩精品免费视频| 国产成人精品视频在线观看| 国产一区二中文字幕在线看| 亚洲国产精品久久精品怡红院| 国产精品嫩草视频| 久久久久www| 俺也去精品视频在线观看| 成人激情在线观看| 亚洲精品xxx| 久久久国产精品一区| 亚洲欧美精品伊人久久| 97超级碰碰碰| 亚洲精品www久久久| 日韩av中文在线| 欧美裸体xxxx极品少妇软件| 欧美成人精品在线| 国产精品麻豆va在线播放| 久久人人爽人人爽爽久久| 中文综合在线观看| 欧美精品免费在线观看| 97av视频在线| 欧美日韩在线视频观看| 在线观看亚洲视频| 美女视频久久黄| 欧美性猛交xxxx富婆弯腰| 高清一区二区三区日本久| 成人福利在线观看| 久久久人成影片一区二区三区观看| 国产精品吊钟奶在线| 亚洲美女av黄| www日韩中文字幕在线看| 欧美极品欧美精品欧美视频| 日本午夜精品理论片a级appf发布| 日韩男女性生活视频| 欧美成人免费在线视频| 国产亚洲欧美日韩一区二区| 亚洲第一av网| 国产精品亚发布| 亚洲成人精品久久| 成人精品一区二区三区电影免费| 黄色一区二区在线| 欧美伦理91i| 欧美视频专区一二在线观看| 亚洲人成网站在线播| 国产成人免费av电影| 日韩中文字幕视频在线观看| 久久免费观看视频| 日韩精品视频观看| 在线视频一区二区| 久久精品小视频| 91av视频在线观看| 亚洲小视频在线观看| 国产精品pans私拍| 国产成人精品视| 中文字幕少妇一区二区三区| 亚洲欧洲一区二区三区久久| 91精品国产高清自在线| 日本一区二区三区在线播放| 欧美日韩亚洲成人| 亚洲欧美日本另类| 色噜噜久久综合伊人一本| 欧美做爰性生交视频| 日韩av影院在线观看| 性色av一区二区三区| 亚洲bt天天射| 国产午夜精品视频免费不卡69堂|