《重構(gòu):改善既有代碼的設(shè)計(jì)》讀書(shū)筆記(一)

最近和一位朋友聊到軟件開(kāi)發(fā)中的代碼重構(gòu)這個(gè)話(huà)題,諸如重構(gòu)原則包括時(shí)機(jī)的考慮、間接層擴(kuò)展、投入產(chǎn)出平衡點(diǎn)等問(wèn)題。于是本人將以前買(mǎi)的《重構(gòu):改善既有代碼的設(shè)計(jì)》這本書(shū)又拿起來(lái)讀了一遍,并對(duì)部分章節(jié)做了讀書(shū)筆記。

對(duì)于這本書(shū),可能很多人已經(jīng)閱讀過(guò),總體上還是挺經(jīng)典的。這里結(jié)合自己的理解,我把其中比較重要的地方做了一些提煉,主要分析梳理重構(gòu)原則相關(guān)內(nèi)容。

1. 重構(gòu)的定義

重構(gòu)是對(duì)軟件內(nèi)部結(jié)構(gòu)的一種調(diào)整,主要是在不改變軟件可觀察行為的前提下,調(diào)整其結(jié)構(gòu),以提高軟件代碼的可理解性,并降低修改成本。

這里要注意代碼重構(gòu)中的兩頂帽子:一是添加新功能時(shí),不要修改已有代碼;二是在重構(gòu)時(shí),只管改進(jìn)程序結(jié)構(gòu),不去添加新功能。

簡(jiǎn)單來(lái)說(shuō),就是將添加新功能與代碼重構(gòu)這兩項(xiàng)工作分開(kāi)處理、不混在一起。因?yàn)橹貥?gòu)的基本前提就是不影響軟件的功能特性,而且分開(kāi)處理,也可以降低重構(gòu)難度。

2. 重構(gòu)的時(shí)機(jī)

我們對(duì)軟件代碼進(jìn)行重構(gòu),可能是為了改進(jìn)軟件設(shè)計(jì),也可能是試圖讓代碼更容易理解,或是為了幫助發(fā)現(xiàn)潛在bug,那么,什么時(shí)候應(yīng)該考慮重構(gòu)?也即重構(gòu)時(shí)機(jī)問(wèn)題。

作者M(jìn)artin Fowler認(rèn)為,應(yīng)該考慮重構(gòu)的時(shí)機(jī),有三個(gè):添加功能時(shí)、修補(bǔ)錯(cuò)誤時(shí)、復(fù)審代碼時(shí)。

在添加新功能時(shí),是否需要重構(gòu),還有一個(gè)輔助的參考判斷,就是改用其他設(shè)計(jì)方式,是否可以簡(jiǎn)化我們的工作,或者說(shuō),重構(gòu)之后是否可以更快、更方便地添加新功能。

與之對(duì)應(yīng)地,不應(yīng)該重構(gòu)的時(shí)機(jī),又分別包括:現(xiàn)有代碼根本不能正常運(yùn)行時(shí)、項(xiàng)目進(jìn)度不允許時(shí)。

因?yàn)榇a重構(gòu)工作一般都需要足夠的時(shí)間,這里就需要我們結(jié)合當(dāng)前項(xiàng)目狀態(tài)和軟件版本計(jì)劃綜合評(píng)估。例如在項(xiàng)目后期,產(chǎn)品即將發(fā)貨時(shí),軟件版本的穩(wěn)定性和發(fā)貨時(shí)間更為重要。這時(shí)候就不太適合啟動(dòng)代碼重構(gòu)了。

3. 間接層

除了重構(gòu)時(shí)機(jī)之外,還有一個(gè)問(wèn)題也是需要關(guān)注的,就是間接層的增加與刪除。

間接層也可以叫中間層或者適配層,主要是用來(lái)減少耦合、隔離變化、復(fù)用邏輯,這里還是根據(jù)使用場(chǎng)景,評(píng)估投入產(chǎn)出,預(yù)期收益大于重構(gòu)的付出時(shí),考慮引入中間層。

例如,移動(dòng)終端上,我們需要讓一套應(yīng)用代碼運(yùn)行在多個(gè)平臺(tái),減少代碼維護(hù)工作量。典型的場(chǎng)景是:不同芯片廠家或者不同的芯片系列往往分別對(duì)應(yīng)一個(gè)平臺(tái)。這時(shí)候可以在各個(gè)平臺(tái)框架層與應(yīng)用層之間增加一個(gè)間接層,來(lái)適配不同平臺(tái)框架接口的差異對(duì)應(yīng)用層代碼的影響。

這個(gè)間接層可以考慮放在應(yīng)用層里面,也可以放在平臺(tái)框架層擴(kuò)展,更多的時(shí)候,在應(yīng)用層和平臺(tái)框架層都需要擴(kuò)展修改,還看這個(gè)應(yīng)用所依賴(lài)的框架層接口,在不同平臺(tái)間的差異有哪些。

關(guān)于代碼重構(gòu),暫時(shí)先到這里,后面繼續(xù)探討,歡迎關(guān)注。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容