
一、重構(gòu)的定義:在不改變軟件功能的前提下,改善代碼的質(zhì)量、使其程序的設(shè)計(jì)模式和架構(gòu)更趨合理,提高軟件的擴(kuò)展性和維護(hù)性。
二、為什么要重構(gòu)?很多人會(huì)說(shuō)系統(tǒng)已經(jīng)上線并運(yùn)行好好的,我們?yōu)槭裁匆貥?gòu)呢,主要有以下幾個(gè)原因:
1、隨著業(yè)務(wù)需求一直增加,原本簡(jiǎn)短、清晰的代碼會(huì)變得越來(lái)越糟糕;
2、隨著業(yè)務(wù)的增加,現(xiàn)有的架構(gòu)已經(jīng)無(wú)法滿足,或者開(kāi)發(fā)效率在降低;
3、新成員的加入,代碼風(fēng)格不統(tǒng)一、質(zhì)量存在問(wèn)題;
4、系統(tǒng)存在性能問(wèn)題,已經(jīng)影響了系統(tǒng)的可用性;
5、系統(tǒng)的UI交互體驗(yàn),已經(jīng)不滿足現(xiàn)有的用戶的需求,影響用戶使用系統(tǒng);
6、發(fā)現(xiàn)有更好的實(shí)現(xiàn)方式。
三、重構(gòu)的好處:重構(gòu)不僅可以提升代碼質(zhì)量,還可以提升工作效率、減少bug的產(chǎn)生。任何架構(gòu)都是隨著業(yè)務(wù)的變化,不斷演變出來(lái)的,而不是一開(kāi)始都設(shè)計(jì)好的,所以學(xué)會(huì)重構(gòu)是程序員的必備能力。
四、重構(gòu)帶來(lái)的問(wèn)題。雖然我讓大家一定要學(xué)會(huì)重構(gòu),并對(duì)系統(tǒng)積極重構(gòu),但重構(gòu)也是會(huì)帶來(lái)諸多問(wèn)題的:
1、增加開(kāi)發(fā)工作量、增加成本;
2、給系統(tǒng)引入新bug;
3、過(guò)渡設(shè)計(jì),增加系統(tǒng)的復(fù)雜度;
4、過(guò)渡設(shè)計(jì),降低性能。
五、保證重構(gòu)質(zhì)量。重構(gòu)帶來(lái)的問(wèn)題,百分百要避免的就是引入新bug,而我們?cè)趺床拍鼙WC代碼的質(zhì)量、把風(fēng)險(xiǎn)點(diǎn)降低呢,主要做好以下幾個(gè)方面:
1、每一次重構(gòu)都需要編寫(xiě)單元測(cè)試并通過(guò)單元測(cè)試;
2、迭代漸進(jìn)式重構(gòu),不要一次性重構(gòu)跨度太多,并保證每一步重構(gòu)通過(guò)單元測(cè)試;
3、保證重構(gòu)前后功能一致,可以通過(guò)所有測(cè)試用例;
4、測(cè)試重構(gòu)前后的性能,雖然性能降一點(diǎn)點(diǎn)不會(huì)影響系統(tǒng)的運(yùn)行,但如果降低太多,導(dǎo)致系統(tǒng)無(wú)法正常運(yùn)行,就是bug了。
六、總結(jié):重構(gòu)任何代碼都是有風(fēng)險(xiǎn)的,在重構(gòu)啟動(dòng)之前,必須要梳理現(xiàn)有的系統(tǒng),并制定必要的流程,保證每一個(gè)步驟都是準(zhǔn)確無(wú)誤的,并嚴(yán)格執(zhí)行所有流程,這樣才能把重構(gòu)的風(fēng)險(xiǎn)降低。重構(gòu)對(duì)代碼編寫(xiě)能力、業(yè)務(wù)需求整理、團(tuán)隊(duì)協(xié)作、測(cè)試能力、管理能力各方面都有極高的要求,所以重構(gòu)是非常容易失敗的,但也是非常鍛煉程序員的能力的。對(duì)于重構(gòu),雖然有諸多挑戰(zhàn),但我建議還是大膽地去重構(gòu)。
熱門(mén)跟貼