一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

改善代碼設(shè)計(jì) —— 總結(jié)篇(Summary)

  系列博客

      1. 改善代碼設(shè)計(jì) —— 優(yōu)化函數(shù)的構(gòu)成(Composing Methods)

      2. 改善代碼設(shè)計(jì) —— 優(yōu)化物件之間的特性(Moving Features Between Objects)

      3. 改善代碼設(shè)計(jì) —— 組織好你的數(shù)據(jù)(Composing Data)

      4. 改善代碼設(shè)計(jì) —— 簡(jiǎn)化條件表達(dá)式(Simplifying Conditional Expressions)

      5. 改善代碼設(shè)計(jì) —— 簡(jiǎn)化函數(shù)調(diào)用(Making Method Calls Simpler)

      6. 改善代碼設(shè)計(jì) —— 處理概括關(guān)系(Dealing with Generalization)

  找出需要重構(gòu)的地方

  最明顯可能需要重構(gòu)的地方包括: 注釋, 長(zhǎng)的方法, 長(zhǎng)的類, 長(zhǎng)的參數(shù)列表. 這些都是很快能看出來(lái)的.

  注釋 (Comments)

  1. 函數(shù)中有處注釋在說(shuō)明下面的一個(gè)代碼塊在做什么事情, 通常采用 Extract Method 將這些代碼放到一個(gè)單獨(dú)的方法中.

  2. 如果某個(gè)函數(shù)上面的注釋在解釋這個(gè)函數(shù)是做什么用的, 多數(shù)情況下是這個(gè)方法名的名字取得不是很好, 通常使用 Rename Method 進(jìn)行重命名.

  3. 如果注釋在解釋代碼運(yùn)行到這邊需要滿足的條件, 考慮使用 Introduce Assertion.

  另外, 我覺得過(guò)分的追求代碼中沒有注釋也是不對(duì)的, 注釋需要恰到好處.

  長(zhǎng)的方法 (Long Method)

  1. 尋找代碼中的注釋, 使用 Extract Method 將函數(shù)分成一小塊一小塊的方法.

  2. 觀察代碼中有沒有太多重復(fù)的代碼, 使用 Extract Method 把這些代碼分離出去, 在原來(lái)的代碼中調(diào)用這些小方法.

  長(zhǎng)的類 (Long Class)

  造成類的代碼過(guò)長(zhǎng)的原因可能有以下兩點(diǎn):

  1. 隨著時(shí)間的推移, 類中在不停的增加新的功能. 可以使用 Extract Class, Extract Subclass, Extract Interface 解決這個(gè)問(wèn)題.

  2. 類中有很多涉及界面的代碼, 比如更新某個(gè)控件. 可以使用 Duplicate Observed Data 來(lái)幫助提取一個(gè)用于更新界面的類, 也就是所謂的 "界面與業(yè)務(wù)分離", 不過(guò)負(fù)責(zé)更新界面的這個(gè)類要寫好更新的同步機(jī)制.

  長(zhǎng)的參數(shù)列表 (Long Parameter List)

  1. 如果參數(shù)能通過(guò)某個(gè)函數(shù)直接獲得, 應(yīng)該去除該參數(shù)項(xiàng), 使用 Replace Parameter with Method, 在函數(shù)中直接調(diào)用.

  2. 如果某個(gè)物件能夠提供函數(shù)中所需的所有參數(shù), 則可以將整個(gè)物件作為參數(shù)傳遞給函數(shù), Preserve Whole Object.

  3. 如果有好幾個(gè)函數(shù)都包含某幾個(gè)參數(shù), 這幾個(gè)參數(shù)很有可能就是所謂的數(shù)據(jù)泥團(tuán) (Data Clumps), 如果合理, 嘗試使用 Introduce Parameter Object, 將數(shù)據(jù)泥團(tuán)封裝到一個(gè)物件中, 讓函數(shù)直接調(diào)用這個(gè)物件.

  重構(gòu), 各抒己見

  一提到重構(gòu), 不少人有一肚子的口水要噴. 一部分人心懷激動(dòng)的感概重構(gòu)所帶來(lái)的諸多好處, 一少些人憤懣它所帶來(lái)的不屬于自己的利益, 甚至是某次不恰當(dāng)?shù)闹貥?gòu)所帶來(lái)的毀滅性結(jié)果. 還有很多人在討論某項(xiàng)重構(gòu)究竟值不值得去做 (這往往應(yīng)該根據(jù)不同情況具體分析后做出不同的選擇).

  對(duì)于重構(gòu), 就好比你想用積木搭一個(gè)建筑物, 重構(gòu)就像是把一塊木頭削成一個(gè)個(gè)小積木的過(guò)程, 而如何去搭建, 大部分是設(shè)計(jì)模式所要解決的問(wèn)題. 重構(gòu)所能帶來(lái)的好處大多數(shù)的共識(shí)是: 重構(gòu)后代碼能夠更讓別人讀懂和理解, 能發(fā)現(xiàn)代碼隱藏的缺陷, 幫助改善軟件設(shè)計(jì), 新需求來(lái)臨時(shí)能提高編程效率。

  記得我第一個(gè)獨(dú)立完成的程序是一個(gè)課程表軟件 (左圖), 用 VB.NET 寫的, 花了三天功夫?qū)懥?2000 多行, 當(dāng)時(shí)一共寫了近 10 個(gè)界面用于包括設(shè)置一個(gè)星期中每天的課程還有其它一些雜七雜八的內(nèi)容. 當(dāng)時(shí)我也知道 "重復(fù)" 的代碼很多, 但只想著 "能運(yùn)行就好了", 于是還光明正大的把一大塊代碼復(fù)制到另外幾個(gè)模板里. 如果想對(duì)這樣的代碼做點(diǎn)優(yōu)化的話, 這時(shí)不應(yīng)該是重構(gòu), 而應(yīng)該重寫. 后來(lái)我也不用這么笨拙的工具來(lái)存儲(chǔ)課程表了, 直接用 HTML+CSS 寫一個(gè)網(wǎng)頁(yè).

  不應(yīng)該先亂七八糟的寫完一堆代碼之后再思考怎么去改善, 應(yīng)該在寫得過(guò)程中不斷的嘗試著對(duì)現(xiàn)有的代碼作出一些優(yōu)化, 最起碼別出現(xiàn)太讓人費(fèi)解的變量名和方法名.

  重構(gòu)是一項(xiàng)需要不少時(shí)間的工作, 如果系統(tǒng)即將到了發(fā)布的 deadline, 這時(shí)并不適合大范圍的重構(gòu).

  很多人覺得用不到重構(gòu), 他們覺得重構(gòu)得不恰當(dāng)會(huì)導(dǎo)致原本好歹能運(yùn)行的系統(tǒng)工作不正常. 或者重構(gòu)需要他們大把大把的精力和腦細(xì)胞, 而重構(gòu)帶來(lái)的利益很可能不屬于他. 還有一些人不太喜歡頻繁的函數(shù)調(diào)用, 認(rèn)為重構(gòu)會(huì)降低一些系統(tǒng)性能等等原因. 但不要因?yàn)椴粫?huì)使用到重構(gòu), 而不去學(xué)習(xí)它, 更不用去抨擊重構(gòu)帶來(lái)實(shí)際好處 (往往因?yàn)槟銢]體會(huì)到).

  參考

  這幾篇都是我看書并聯(lián)想自己寫過(guò)的代碼的總結(jié), 廢話較少, 特別感謝不少細(xì)心的園友幫我糾正一些錯(cuò)誤, 還提出了一些很有價(jià)值的建議.

  參考 《重構(gòu) —— 改善既有代碼設(shè)計(jì)》, 《重構(gòu)手冊(cè)》 , 還有自己的一些理解和經(jīng)驗(yàn).

it知識(shí)庫(kù)改善代碼設(shè)計(jì) —— 總結(jié)篇(Summary),轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 色偷偷亚洲第一成人综合网址 | 99久久好看一级毛片 | 午夜欧美性视频在线播放 | 日韩理论视频 | 99精彩免费观看 | 国产成人精品免费视频大 | 国产日产欧产精品推荐推荐 | 欧美黄色片免费观看 | 95在线观看精品视频 | 久久精品99成人中文字幕880 | 美女胸又大又www又黄的网站 | 最新精品亚洲成a人在线观看 | www.欧美激情 | 久久99精品久久久久久青青91 | 国产一区成人 | 国产成+人+综合+亚洲不卡 | 日韩精品一区二区三区四区 | 国产真实乱子伦精品视手机观看 | 黄色视品 | 91精品福利 | 亚洲综合成人网在线观看 | 49pao强力在线高清基地 | 精品久久久99大香线蕉 | www.一区二区三区 | 亚洲国产天堂久久综合图区 | 午夜欧美性欧美 | 日韩字幕无线乱码 | 欧美日韩激情 | 99久久精品国产高清一区二区 | 日本久久综合 | 日本高清中文字幕一区二区三区a | 国产福利午夜自产拍视频在线 | 国产伦精品一区二区三区免费迷 | 2021精品国内一区视频自线 | 日本一区二区三区日本免费 | 青青草原伊人网 | xxxx网| 视色4se成人午夜精品 | 国产永久在线观看 | 久久影院精品 | 九九成人免费视频 |