破解遺留系統快速重構的5步心法(附例項)
前兩天和一個架構師朋友閒聊,說到了 「重構」 這個話題,他們公司早年間上線的專案系統,因一直沒專人在演進過程中為程式碼質量負責,導致現在程式碼越來越混亂,逐漸堆積成“屎山”,目前的維護成本已遠高於重新開發一套新系統,想重構也沒有合適的人力物力以及時機,只能繼續湊合用。說實在的,這確實不只是朋友他們一家公司會遇到的問題,而造成這種情況的原因大概率有以下幾點:
- 編碼之前缺乏有效的設計
- 成本上的考慮,在原功能堆砌式程式設計
- 缺乏有效程式碼質量監督機制
可以看出,最好的解決辦法就是不要堆積遺留問題。對此,業界現有的比較“成熟”的解決思路是:通過持續不斷地重構將程式碼中的“壞味道”清除掉。 可惜說起來容易,做起來卻很難,要克服遺留系統重構往往有三大阻力:首要的就是怕出錯,不知道怎樣保障重構的安全性和效率,其次,很多遺留系統規模及業務複雜度太高 , 開發人員又缺乏改造的方法及經驗,根本不知從何入手 ; 而且如果修改只是單單停留在程式碼層面上,很難徹底解決問題,從而提高研發效率和提高產品質量。 後來我們扒了不少文章,終於看到一個不錯的,一針見血地指出了三個關鍵點:自動化、系統化及工程化 。 簡單來講,就是要先通過自動化重構提高開發效率,再通過系統的流程方法,逐一擊破,最後通過工程化管理,持續演進,如下圖所示。
分享人是 Thoughtworks 資深諮詢師、也是中國區 DTO 團隊敏捷技術教練「黃俊彬」。最近極客時間還特意邀請他做了一個重構系統專欄—— 《 大型 Android 系統重構實戰》 ,提前看了下導讀,裡面不但有詳細的關於遺留系統重構三大關鍵的指南講解,他還特意選擇了一個在 實際工作可能會遇到的 App 專案,直接帶你實操改造,這點還挺難得的。
在這個過程中,他自己也總結了一套行之有效和高效實戰系統重構的方法論,並且嘗試把這套方法論傳授給更多的人,所以,他跟極客時間合作推出了 《大型 Android 系統重構實戰》 專欄。這種資歷的大佬能出來開課,把自己獨特的方法和經驗共享出來,真的很難得。五步提升,帶你真正實戰系統重構 。
為了讓內容能夠切切實實地幫助到大家,聽說這個專欄經過了多次深入使用者、專家調研的反覆打磨。而且實打實地帶大家實戰,圍繞著一個貼近日常開發場景的 APP 專案重構。特意看了下,這個例項裡綜合了很多遺留系統裡的典型程式碼“壞味道”和程式碼耦合問題。 完整跟下來,不但能幫助你和你的團隊掌握專欄裡的流程方法、工具、設計思想,還能融會貫通到其他專案中,真正做到提高團隊效率,提升最終的交付質量。
第一步:基礎提升篇本篇主要講解重構以及自動化測試的基礎知識,包括重構的型別、時機、安全重構的手法,自動化測試的策略和常用框架。這部分內容是日常開發的必備技能,能有效幫助你提高編碼的效率以及程式碼的質量。
第二步:分析設計篇這部分是針對遺留系統業務複雜度高的問題,會結合例項教你如何分析系統、診斷問題。根據現有架構與理想架構設計的差距,找出撬動遺留系統的關鍵槓桿點。學完這個部分,你就能瞭解主流的應用架構,掌握常用的遺留系統分析工具。
第三步:解耦重構篇通過系統的重構方法流程,藉助自動化測試以及自動化重構方法,帶你對示例專案做元件化重構和元件內的分層架構重構。另外,黃老師還會給你講解業內一些主流的注入及路由框架使用及原理,幫助你在專案中用好這些框架。學完這個部分,重構易出錯的問題就能迎刃而解了。
第四步:持續交付篇這一篇會系統介紹元件化後項目的版本管理、製品管理以及分層分級流水線的設計等工程管理問題。這些實用技巧是老師從多年的專案經驗中沉澱總結而來,有助於解決改造不全面的問題。
第五步:擴充套件篇這一部分會將遺留系統的問題從 APP 擴充套件到整個手機廠商的 Android 定製系統,帶你瞭解Android定製系統的耦合問題以及解耦的策略及方法。這個部分,可以擴充套件你的知識面,讓你站在更復雜的問題域上,綜合運用之前所學的內容,以不變應萬變。 說了這麼多,具體內容我們可以看看一起目錄。