大型系統的重構
大型軟體的生命週期如下圖:
成熟Maturity期初期:效能好,各方面功能都很穩定,可以順利增加許多新功能,BUG能夠控制修復。但是當到了
Infeasibility階段就開始惡化,出現如下各種情況:
1.無法加入新功能。每次加入新功能都是非常費力,導致新功能實現時間延長,專案不斷拖延。
2.每個BUG修復帶來新的BUG,改正了老問題,卻帶來了新問題。
3.原先架構受到損害,被各種程式設計師改得面目全非。
4.散發程式碼臭味,重複方法 長方法。參考Martin Fowler的重構一書。
5.測試覆蓋面不足,無法保證原先功能正常。隨著新功能擴充套件複雜,老功能是否正常都無法保證。
他們提出重構方法:
1.重新設計redesign應用:一個完全重新設計和應用的重新實現。重新建模,從分析開始重新設計,程式碼重寫。
2.重新實現Reimplementation:What不動,重新首先HOW:重寫程式碼 進行可伸縮性的重構,增加並行非同步執行。
成功重構的條件是:
1.Team :人員多少,期待一兩個不現實。
2.經驗:大型規模系統重構必須由經驗豐富擔任,紮實架構設計功底是必須的。
3.動機:不同於開發新功能,學習新知識,重構是程式碼質量更好。(類似做後勤,吃力不討好,但是非常重要)
4.帶頭工程師:雖然都是高手,還是選出一個高高手帶頭,必須非常熟悉原來系統。
如何確保重構目標實現?
1.靈活:重構是一個長期任務,需要不斷根據客戶需要改變。
2.持續整合:需要Build伺服器,每日整合
3.自動測試:確保應用程式的行為並沒有改變的生命線
具體方法是:評估和總體規劃
1.評估出原來系統問題:例如沒有分層
2.提出解決問題的規劃:分層,清理表現層,用通用框架替代自己做的。
下圖是他們重構專案的一個步驟圖,從原來耦合無層到後來分層:
重構不是一次性戰鬥,是長期艱鉅任務,邊開發邊重構才不致於痾病成積。這是一個針對不斷惡化的戰鬥。
相關文章
- 大型系統重構的步驟簡單梳理
- 大型網站系統架構演化網站架構
- 系統重構的道與術
- 大型網站系統架構演化之路【mark】網站架構
- Feed流系統重構-架構篇架構
- 聊一聊系統重構
- 微核心架構在大型前端系統中的應用架構前端
- 大型購物平臺的系統設計與架構架構
- 淺談大型分散式Web系統的架構演進分散式Web架構
- 如何使用bloomfilter構建大型Java快取系統OOMFilterJava快取
- 大型網際網路系統架構是如何設計的?架構
- 架構團隊如何重構內部系統架構
- 大型網站背後的高效能系統架構設計網站架構
- 為構建大型複雜系統而生的微服務框架 Erda Infra微服務框架
- WorkManager完全解析+重構輪詢系統
- 公司ERP系統重構那些事
- 淺談大型網站動態應用系統架構網站架構
- 大型網站架構體系的演變網站架構
- 向高手請教--系統重構經驗
- 大型企業集團資訊化系統總體構架分析
- 新公司的第一個任務-重構系統(一)
- 如何重構CRM系統,滿足擴充套件的需求套件
- 遺留系統如何升級,重構成CQRS的模式模式
- 大型分散式電商系統架構是如何從0開始演進的?分散式架構
- 說說大型高併發高負載網站的系統架構(更新)負載網站架構
- 雲端計算時代下的大型ERP系統架構, 演講完畢...架構
- 大型檔案去重
- 大型分散式電商系統架構如何從0開始演進?分散式架構
- 一次訂單系統重構實踐
- 大型分散式網站架構:快取在分散式系統中的應用分散式網站架構快取
- 說說大型高併發高負載網站的系統架構(轉載)負載網站架構
- 重構系統不得不考慮的兩個問題
- 大型網站架構之:MySpace的體系架構一(轉載)網站架構
- 大型網站架構之:MySpace的體系架構二(轉載)網站架構
- 使用scrapy搭建大型爬蟲系統爬蟲
- 微信小程式大型系統架構中應用Redis快取要點微信小程式架構Redis快取
- 老舊業務重構案例——IM系統如何設計
- 垃圾回收(二)【Windows 系統上的大型物件堆】Windows物件