吉安網(wǎng)站設(shè)計(jì)杭州百度優(yōu)化
關(guān)于重構(gòu)一點(diǎn)簡(jiǎn)單想法
當(dāng)前工作的組內(nèi),由于業(yè)務(wù)開(kāi)啟的時(shí)間正好處于集團(tuán)php-》go技術(shù)棧全面遷移的時(shí)間點(diǎn),組內(nèi)語(yǔ)言技術(shù)棧存在:php、go兩套。
因此需求開(kāi)發(fā)過(guò)程中通常要考慮兩套技術(shù)棧的邏輯,一些基礎(chǔ)的邏輯也沒(méi)有辦法復(fù)用。
在這樣的背景下,技術(shù)棧從php遷移到go這樣的重構(gòu)是一個(gè)時(shí)不時(shí)就會(huì)提起的話(huà)題。
為什么要重構(gòu)
一言以蔽之:提高項(xiàng)目后續(xù)維護(hù)/開(kāi)發(fā)的效率。
隨著項(xiàng)目的持續(xù)開(kāi)發(fā),項(xiàng)目復(fù)雜度會(huì)越來(lái)越高,開(kāi)發(fā)效率會(huì)越來(lái)越低,如下圖,而且不僅開(kāi)發(fā)效率越來(lái)越低,出bug的概率也越來(lái)越大。我們重構(gòu)的目的就是讓圖中的的黑色曲線(xiàn)的斜率平緩一些。
?
我們要明白 重構(gòu)(refactor) != 重寫(xiě)(rewrite),重寫(xiě)是重構(gòu)的一個(gè)子集,每一次對(duì)代碼質(zhì)量提升而產(chǎn)生的修改都可以稱(chēng)之為重構(gòu),小到一個(gè)函數(shù)或者變量的改名。
?
實(shí)踐向:怎么進(jìn)行重構(gòu)
這里不高談闊論一些戰(zhàn)略,從戰(zhàn)術(shù)角度來(lái)講述一些方法論。
平時(shí)|小型重構(gòu)
-
重構(gòu)無(wú)論大小,看見(jiàn)能順手重構(gòu)的地方就及時(shí)順手重構(gòu)。這里列出來(lái)一些常見(jiàn)的可以順手重構(gòu)的地方:
- 函數(shù)更改更合適的名字
- 不同邏輯收斂到一個(gè)地方統(tǒng)一處理(抽象),比如:不同地方的同樣功能的函數(shù),公共枚舉值。
- 將“巨型”函數(shù)拆成合適的小函數(shù)
-
開(kāi)發(fā)過(guò)程中就分配時(shí)間進(jìn)行重構(gòu):如果不是特別緊急的需求,建議預(yù)留10%~20%的時(shí)間留給重構(gòu)工作。
?
專(zhuān)項(xiàng)大型重構(gòu)
當(dāng)項(xiàng)目的架構(gòu)對(duì)開(kāi)發(fā)效率造成了嚴(yán)重的阻礙,此時(shí)可以考慮一個(gè)專(zhuān)項(xiàng)對(duì)項(xiàng)目專(zhuān)門(mén)排期進(jìn)行重構(gòu)。
- 對(duì)重構(gòu)的順序按照下面等級(jí)排序:(優(yōu)先考慮價(jià)值、其次考慮成本)。
- OKR管理,指定好目標(biāo):1.現(xiàn)狀整理(到底有哪些技術(shù)債);2.制定好具體目標(biāo):收斂哪幾個(gè)功能能力,收斂配置統(tǒng)一到某個(gè)地方等等;3.人員分配和排期。
?
題外話(huà)|荒唐走板
- 寫(xiě)代碼的時(shí)候注意保護(hù)好自己:無(wú)論是哪種重構(gòu),只要對(duì)代碼運(yùn)行可能造成隱患的,都建議通知對(duì)應(yīng)功能的負(fù)責(zé)人,讓其對(duì)代碼的修改進(jìn)行cr等工作,防范重構(gòu)引入的風(fēng)險(xiǎn)。
- 重構(gòu)不是目的,只是手段:重構(gòu)代碼的目的是為了提高代碼質(zhì)量,提升團(tuán)隊(duì)的開(kāi)發(fā)效率。在平時(shí)的工作中,團(tuán)隊(duì)最好達(dá)成共識(shí),一起對(duì)代碼質(zhì)量做好監(jiān)控相關(guān)的工作。