abstrakt: 對于如何進(jìn)行代碼重構(gòu),一直有著很多種說法。很多人都認(rèn)為應(yīng)該將重構(gòu)代碼放在backlog里。但是其實(shí),這并不是一個(gè)理想的方法?! ≡陧?xiàng)目剛剛開始的時(shí)候,你的代碼很干凈。 即使有的時(shí)候需要小小的繞一下路,但是這個(gè)時(shí)候我們可以輕松、平穩(wěn)的添加功能。這個(gè)階段一般都不會出現(xiàn)問題,而且由于我們比較著急,所以即使出現(xiàn)了一些小問題,我們也不會注意到?! ∪欢?,隨著項(xiàng)目做的時(shí)間變長,這些小的問題就會累計(jì)起來。
對于如何進(jìn)行代碼重構(gòu),一直有著很多種說法。很多人都認(rèn)為應(yīng)該將重構(gòu)代碼放在backlog里。但是其實(shí),這并不是一個(gè)理想的方法。
在項(xiàng)目剛剛開始的時(shí)候,你的代碼很干凈。
即使有的時(shí)候需要小小的繞一下路,但是這個(gè)時(shí)候我們可以輕松、平穩(wěn)的添加功能。這個(gè)階段一般都不會出現(xiàn)問題,而且由于我們比較著急,所以即使出現(xiàn)了一些小問題,我們也不會注意到。
然而,隨著項(xiàng)目做的時(shí)間變長,這些小的問題就會累計(jì)起來。這就是人們所說的“技術(shù)債務(wù)”。其本質(zhì),就是并不算特別好的代碼,但是這個(gè)時(shí)候其問題還沒有完全顯現(xiàn)出來。
但是,隨著我們一直添加新功能,這些問題就會逐漸顯現(xiàn)出來,我們不得不小心翼翼的繞開他們。
不可避免的,我們的開發(fā)速度會被拖慢。但是為了追求速度,我們開始變得越來越不小心,不久之后,問題也會越來越多。
這些問題會像積木一樣累計(jì)起來,層層疊疊,讓我們的開發(fā)速度變得更慢。雖然我們終于意識到了問題的存在,但是沒有時(shí)間徹底解決它。我們只能繼續(xù)小心翼翼的繞開它們。
很快,我們會發(fā)現(xiàn)半數(shù)以上的代碼都與那些小問題有交集,它們無時(shí)無刻不在影響我們的開發(fā)速度。直到有一天,你發(fā)現(xiàn)自己沒法繼續(xù)繞開它們。
不得不做點(diǎn)事情了。我們必須要進(jìn)行復(fù)雜的代碼重構(gòu),讓我們重新獲得干凈的代碼。你不得不向上級申請時(shí)間進(jìn)行代碼重構(gòu)。其實(shí)這種工作方式并不好,我們花時(shí)間去填自己以前挖的坑。而且有的時(shí)候,公司并沒有讓你去重構(gòu)代碼的時(shí)間。
即使公司給你時(shí)間了,你也很難很好的對代碼進(jìn)行重構(gòu)。要知道,重構(gòu)代碼所需的時(shí)間,往往要遠(yuǎn)高于你的預(yù)期。如果這些紛亂的代碼是你用了10周寫出來的,那么你很難再用10周的時(shí)間對它們進(jìn)行重構(gòu)。
由此可見,這種代碼重構(gòu)的方式并不好。那么我們應(yīng)該怎么做呢?
很簡單,那就是每遇到一個(gè)問題,就馬上解決它,而不是選擇繞過它。完善當(dāng)前正在使用的代碼,那些還沒有遇到的問題,就先不要理它。在當(dāng)前前進(jìn)的道路上,清除所有障礙,以后你肯定還會再一次走這條路,下次來到這里的時(shí)候你會發(fā)現(xiàn)路上不再有障礙。軟件開發(fā)就是這樣。
或許解決這個(gè)問題需要你多花一點(diǎn)時(shí)間。但是從長遠(yuǎn)來看,它會幫你節(jié)省下更多的時(shí)間。
在添加新功能的時(shí)候,我們就先清理這個(gè)功能所需要的代碼。花一點(diǎn)時(shí)間,用滴水穿石的方法逐漸清理代碼,隨著時(shí)間的推移,我們的代碼就會越來越干凈,開發(fā)速度也會越來越快。
一段時(shí)間之后,你會發(fā)現(xiàn)之前所有的技術(shù)債務(wù)都不見了,所有的坑都被填平了。這種循序漸進(jìn)的代碼重構(gòu)的好處開始顯現(xiàn),編程的速度明顯加快