前言
之前也介紹過我們團隊的前端項目從零開始經(jīng)歷8個月迭代業(yè)務(wù)代碼10萬行(僅為產(chǎn)品長期規(guī)劃需求的20%),至今仍然在不斷迭代的過程。
團隊成員除了設(shè)計好的架構(gòu)來管理這種復(fù)雜度極高的前端應(yīng)用,還開始補充設(shè)計模式以及重構(gòu)方面的知識,目的是為了讓項目代碼在不斷迭代的過程中優(yōu)化項目代碼,保持代碼的新鮮度,魯棒性,可維護性… 讓后續(xù)加入的團隊新人也可以快速加入我們的產(chǎn)品開發(fā)中
PS: 不管對于何種語言,重構(gòu)都是軟件開發(fā)過程中不可或缺的一部分。如果已經(jīng)了解重構(gòu)的基礎(chǔ),可以直接跳往至文章后面的重構(gòu)案例部分。
重構(gòu)背景
“如果尿布臭了,就換掉它”。
什么是重構(gòu)
我們回過頭來看一下"什么是重構(gòu)"
摘自《重構(gòu) - 改善既有代碼的設(shè)計》(下面簡稱《重構(gòu)》)
何時重構(gòu)?
我們需要明確的一點是: 重構(gòu)不是一件應(yīng)該特地撥出一段時間來做的事情。重構(gòu)不是目的,但是重構(gòu)可以幫助你把事情做好。
事不過三,三則重構(gòu)
重構(gòu)的衡量指標
抓重點 抓重點啦
說了這么多廢話,其實大家都明白沒有與實踐結(jié)合的理論都是空虛的。
但是 重構(gòu)和 設(shè)計模式一樣,也是需要一個"學(xué)習(xí)——領(lǐng)悟——突破"的過程。第一步的學(xué)習(xí)讓你了解基本的重構(gòu)手法,第二步的實踐勾起你對重構(gòu)手法的回憶以及重溫應(yīng)用,第三步的應(yīng)用以及實踐經(jīng)驗激發(fā)你的思考,領(lǐng)悟以及總結(jié),以致于靈活運用。
但凡是人,總是在不斷學(xué)習(xí),不斷溫習(xí),以達到具體場景具體應(yīng)用,靈活自如。
重構(gòu)是一個很大的話題,《重構(gòu)》作者本人也是經(jīng)歷了N多的項目,以及多年的經(jīng)驗才總結(jié)出來的重構(gòu)技巧。
重構(gòu)技巧
《重構(gòu)》一書作者總結(jié)的重構(gòu)手法實在是太多了,只能通過圖片來展示一下所有作者總結(jié)的重構(gòu)列表。
具體的補充,大家可以看看《重構(gòu)》一書。
重構(gòu)的實踐
作者推薦的一種做法:
隨機挑選一個目標
先給自己選擇一個目標(譬如“去掉一堆不必要的子類”),然后朝著目標前進,每一步走得小而堅定沒把握就停下來
當你無法證明自己所做的一切能夠保證原有程序的邏輯和語義時,請你停下來思考:既有的重構(gòu)是改善了還是毫無成果需要撤銷。作為開發(fā)者, 應(yīng)當把重構(gòu)作為開發(fā)的一部分,一邊開發(fā)一邊重構(gòu)。在快速堆疊代碼,實現(xiàn)基本需求功能的基礎(chǔ)上,寫好測試用例,保證功能不變,逐步重構(gòu)。
這也是我們團隊要求每個人都掌握重構(gòu)這門必備技能的原因。優(yōu)秀的程序員應(yīng)當盡量避免低質(zhì)量的代碼。
重構(gòu)案例
故事場景
有三種類型的電影,顧客可以進行租賃
租賃規(guī)則
價格計算規(guī)則:
普通片兒 —— 起步價2¥,超過2天的部分每天每部電影收費1.3元
新片兒 —— 每天每部3元
兒童片 —— 起步價2¥,超過3天的部分每天每部電影收費0.8元
積分計算規(guī)則:
每借一部電影積分加1,新片每部加2
原始代碼
CODEPEN
程序結(jié)果:(請保證重構(gòu)后結(jié)果不變~)
類圖
有興趣的可以先看看原始代碼,考慮一下其中的原始對象關(guān)系,再行考慮如何重構(gòu)代碼。原始代碼其實是有很多問題可以挖掘的,下面是我們的討論整理:
部分重構(gòu)
這里為了更好的展示重構(gòu)的手法,使用TS,根據(jù)上面的討論進行了部分重構(gòu),重構(gòu)的方式其實是根據(jù)業(yè)務(wù)未來的擴展方向而定,并沒有最優(yōu)解,有興趣的可以加入我們,拋出你的見解~
CODEPEN 執(zhí)行結(jié)果:
重構(gòu)后的類圖關(guān)系
基本技巧
推薦書籍
《代碼整潔之道》
《重構(gòu) - 改善既有代碼的設(shè)計》
《修改代碼的藝術(shù)》
《代碼大全》
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com