成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

重構(gòu):你可能不知道的重構(gòu)場景

codecook / 790人閱讀

摘要:過多的注釋注釋多并不是一件壞事,它是重構(gòu)的領(lǐng)路人,當(dāng)你感覺需要為某段代碼寫上注釋時,這意味著你認(rèn)為這段代碼不容易被他人理解,也側(cè)面證明了這就是重構(gòu)發(fā)出的預(yù)警信號,所以當(dāng)想要寫注釋時,就先重構(gòu),爭取讓注釋都變得多余。

什么是重構(gòu)?

“重構(gòu)”一詞想必你已經(jīng)聽膩了,就是整理代碼唄,不不不,重構(gòu)旨在不改變調(diào)用者行為的前提下,對內(nèi)部邏輯進(jìn)行調(diào)整優(yōu)化,提高其理解性,降低其修改成本,它是一門藝術(shù),是程序員至高無上的榮耀……

何時重構(gòu)?怎么重構(gòu)?

經(jīng)常聽到周邊的人抱怨沒有時間重構(gòu),重構(gòu)并不是多帶帶抽出時間集中處理的,而是當(dāng)你想要做某個功能時,隨手把需要重構(gòu)的地方安排了。

邏輯重復(fù)

重復(fù)代碼是最核心常見的預(yù)警信息,如果有兩個及以上的重復(fù)邏輯,就應(yīng)該考慮將其合并。比如同一類或不同類中的函數(shù)存在相同邏輯的部分,就應(yīng)該把相同部分抽象為獨(dú)立函數(shù)或類。

長函數(shù)

應(yīng)該有很多同學(xué)經(jīng)手過別人數(shù)百行甚至上千行的代碼,讓人質(zhì)疑人生。為方便理解,最好的方式是把長函數(shù)分解為若干小函數(shù),搭配上易理解的函數(shù)名,便可以像自然語言一樣理解代碼。

參數(shù)過多

有一種習(xí)慣非常不好,就是把所有要用到的變量當(dāng)做函數(shù)的參數(shù),這樣會加劇代碼的理解難度,拓展極其困難,當(dāng)需要更多數(shù)據(jù)時,不得不修改所有函數(shù)的參數(shù),牽一發(fā)動全身。如果把對象作為參數(shù),需要用到的數(shù)據(jù)都放進(jìn)對象里,就可以有效解決參數(shù)過長的問題。

函數(shù)出軌

你要是發(fā)現(xiàn)一個函數(shù)頻繁的調(diào)用某一個類,它很可能給你戴了綠帽子,不如忍痛割愛,放其自由吧,把函數(shù)歸并到它喜歡的類,也許他們在一起生活更為合適,你一定會找到一個適合的人。

變化擴(kuò)散

如果新加入一個業(yè)務(wù)類型(例如支付渠道、數(shù)據(jù)庫類型等)時,需要改動很多地方才能實(shí)現(xiàn),這就意味著還有改進(jìn)的空間,可以將引起變化的原因抽出來做為配置,并將變化的函數(shù)放置到一個類中,這樣不僅可以做到修改一處就應(yīng)對變化,還可以很清晰的知道哪些函數(shù)會受到影響。

工具小助手

一款語言包含很多基本類型與內(nèi)置函數(shù),但不能滿足所有需求,比如金額單位轉(zhuǎn)換、時間數(shù)組格式轉(zhuǎn)換、UUID生成等簡單又容易忽略的小功能,如果這些功能出現(xiàn)的頻率很高,規(guī)則改變會帶來一連串的修改,這時可以考慮將這些小功能抽象為工具函數(shù),并將這些函數(shù)組合為工具類。

意淫的功能

有些邏輯以為將來會有一些變化,于是安插了很多鉤子函數(shù)應(yīng)對非必要的特殊情況,這樣往往提高了系統(tǒng)復(fù)雜性和理解成本,如果安插的鉤子都能被用到且有價值,那么就使用,否則還是不要放在代碼里阻礙視線了。

switch過多

假如現(xiàn)在要做一個支持微信、支付寶、招行等渠道的支付平臺,需要對接不同渠道,因?yàn)椴煌缹臃绞讲煌?,就需要用switch來根據(jù)類型選擇對應(yīng)渠道的對接方式,但是很多地方都可能用到這個switch,一旦新渠道加入就要滿世界的找哪里用到了switch。

可以將switch語句移植為獨(dú)立的函數(shù),將這些函數(shù)組成基類,case語句調(diào)用子類對應(yīng)的函數(shù),具體實(shí)現(xiàn)讓子類去完成,這樣支付渠道的增加和變更只需要修改一個類即可。

多余的類

創(chuàng)建的每一個類,對于其他人來講都是有理解成本的,如果曾經(jīng)為某個變化所添加的類,在實(shí)際場景中并沒有發(fā)生變化,那么就把這個類去掉吧,我們需要真正有價值、理解成本低的系統(tǒng)。

讓人犯暈的變量

一個類會設(shè)置一些為特殊情況設(shè)置的變量,這些變量不一定都會被使用,經(jīng)手你代碼的人還要猜測當(dāng)時設(shè)置這些變量的目的,非常讓人頭大,不如把這些變量和相關(guān)函數(shù)多帶帶放在一個類中,屏蔽具體細(xì)節(jié),需要的功能通過函數(shù)來表達(dá),會使功能擴(kuò)展更高效。

幽靈類

項(xiàng)目中偶爾會出現(xiàn)一些“幽靈類”,這些類沒有做什么實(shí)際工作,只是負(fù)責(zé)調(diào)用其它的類,不如把這個“中間人”去掉,讓實(shí)際要調(diào)用的那個類與調(diào)用者發(fā)生關(guān)系。

雷同的類

如果兩個類,其中某幾個函數(shù)作用相同,名稱不同,那就可以通過修改名稱或移植函數(shù)的方式將兩個相似的類保持一致,然后把兩個類抽象出基類,以便擴(kuò)展。

過多的注釋

注釋多并不是一件壞事,它是重構(gòu)的領(lǐng)路人,當(dāng)你感覺需要為某段代碼寫上注釋時,這意味著你認(rèn)為這段代碼不容易被他人理解,也側(cè)面證明了這就是重構(gòu)發(fā)出的預(yù)警信號,所以當(dāng)想要寫注釋時,就先重構(gòu),爭取讓注釋都變得多余。

如果你喜歡本文,可以關(guān)注微信公眾號“關(guān)愛程序員社區(qū)”(icoder_club),干貨更不停

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/31447.html

相關(guān)文章

  • Java代碼分析器(六): 大規(guī)模自動重構(gòu)經(jīng)驗(yàn)談

    摘要:接口級行為不變,內(nèi)部行為盡量不變,類結(jié)構(gòu)盡量不變?yōu)榇a模式和場景確立一組明確的前提條件,重構(gòu)必須滿足前提條件才能進(jìn)行。但是大規(guī)模難以完美做到這三點(diǎn)。因此自動重構(gòu)是革命性的技術(shù)。 另載于 http://www.qingjingjie.com/blogs/7 最后再啰嗦一篇吧,分享些宏觀經(jīng)驗(yàn),供需要做類似事情的人參考。 技術(shù)示例在前篇! 伸手黨繞行! 大規(guī)模系統(tǒng)重構(gòu),不可避免要觸到各個團(tuán)隊(duì)...

    Caizhenhao 評論0 收藏0
  • 重構(gòu)---改善既有代碼設(shè)計》

    摘要:為何重構(gòu)重構(gòu)有四大好處重構(gòu)改進(jìn)軟件設(shè)計如果沒有重構(gòu),程序的設(shè)計會逐漸腐敗變質(zhì)。經(jīng)常性的重構(gòu)可以幫助維持自己該有的形態(tài)。你有一個大型函數(shù),其中對局部變量的使用使你無法采用。將這個函數(shù)放進(jìn)一個單獨(dú)對象中,如此一來局部變量就成了對象內(nèi)的字段。 哪有什么天生如此,只是我們天天堅(jiān)持。 -Zhiyuan 國慶抽出時間來閱讀這本從師傅那里借來的書,聽說還是程序員的必讀書籍。 關(guān)于書的高清下載連...

    baihe 評論0 收藏0
  • 重構(gòu)-改善既有代碼設(shè)計(五)--重構(gòu)列表

    摘要:什么是重構(gòu)列表重構(gòu)方法需要以一種特定的格式記錄下來。這些重構(gòu)手法到底有多成熟本書中提到的重構(gòu)手法第章。做法創(chuàng)造新函數(shù),以用途命名提煉代碼到函數(shù)中檢查變量名是否符合規(guī)范在源函數(shù)中,將被提煉代碼替換為函數(shù)引用測試范例重構(gòu)前重構(gòu)后 什么是重構(gòu)列表 重構(gòu)方法需要以一種特定的格式記錄下來。按照格式記錄下來的重構(gòu)方法的集合叫重構(gòu)列表 重構(gòu)的記錄格式 每個重構(gòu)手法可分為5個部分: 名稱 構(gòu)建重構(gòu)詞匯...

    davidac 評論0 收藏0
  • React 單元測試策略及落地

    摘要:寫好的單元測試,對開發(fā)速度項(xiàng)目維護(hù)有莫大的幫助。我認(rèn)為單元測試的上下文存在于敏捷中。接下來一小節(jié),就可以正式進(jìn)入如何做的環(huán)節(jié)了如何寫好單元測試。前面說到,我們對單元測試寄予 寫好的單元測試,對開發(fā)速度、項(xiàng)目維護(hù)有莫大的幫助。前端的測試工具一直推陳出新,而測試的核心、原則卻少有變化。與產(chǎn)品代碼一并交付可靠的測試代碼,是每個專業(yè)開發(fā)者應(yīng)該不斷靠近的一個理想之地。本文就圍繞測試講講,為什么我...

    nifhlheimr 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<