生活随笔
收集整理的這篇文章主要介紹了
架构之重构12法则
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
架構之重構
一 、 概述
對于開發者來說 架構設計是軟件研發過程中最重要的一環 , 所有沒有圖紙就造不了房子 。 在遍地APP的時代 , 架構設計有了一些比較成熟的模式 , 開發者和架構師也可以相互借鑒 。但是 , 隨著應用的不斷發展 , 最初的架構往往面臨著各種問題 , 比如無法滿足客戶發的需求 , 無法實現應用的擴展 ,無法實現新的特性等 。 在這種情況下 , 我們如何避免一些坑 , 盡量比較成功的實現架構的重構 , 是很多開發者和架構師繼續解決的問題
二、 確定的重構的目的性和必要性
這一步看起來是有些多余 , 但是仍然是我們不可忽略的一步 。 每一次架構的重構都是“傷筋動骨” , 就像做手術 , 及時成功 , 也會傷元氣 , 所以決策者們首先要分析架構重構的理由和備用方案 , 明確重構的目的是為了滿足業務需求, 并且是不得不做的最佳方案 , 然后在考慮其他問題 , 有時 , 經過分析就會發現 , 也許還有其他解方案 , 比如增加計算資源 , 或者重構的目的不是為了業務需求 , 那就沒有必要做了。檢車清單:
重構的原因是什么? 是為了滿足新的業務需要 還是只是覺得目前的架構不好看?除了重構之外還有其他備選方案么? 是否一一分析過這些方案的利弊?
三 、 定義“重構完成” 的界限
如果確定要重構 , 那么先把目標明確下來 , 也就是重構的邊界條件 , 怎么才算是“完成” 了重構 , 這個目標要有數據量化 , 或者又能夠測試的辦法 。 這也是一個需求分析的過程 , 如果過需求不明確 , 那么需求規格說明書沒有辦法寫清楚 , 負責重構的團隊也沒有明確的目標 , 不能以重構的時間或者主觀的判斷為結束的依據 。 前幾天和一朋友聊天,他最近在負責系統的性能優化,也要做一些重構的事情,開始的時候團隊的目標不明確,大家不知道優化到什么程度,所以不敢下手。如果目標是提高10%,那么可以從細節處著手;如果是提高50%,那可能要搞大動作才能實現了。后來目標明確之后,團隊才找到合適的辦法。檢查清單:
重構的目標可以量化 。 或者說可以測試么?重構完成的標準是什么? 重構是否的到了業務或領導的認可?
四 、 漸進式重構
現在軟件研發最流行的就是快速迭代、持續交付、盡早反饋。這同樣可以用在架構的重構上,重構過程的難度不亞于構建一個新產品,所以在設計重構的時候,要引入持續交付的流程,每一個重構步驟或者模塊都要快速部署并得到反饋,以便評估重構的效果,及時作出策略調整。有的讀者會說,我們的架構重構是釜底抽薪型的,沒法漸進,只能一蹴而就。如果是這種情況,可以考慮在另外一套拷貝的系統中做重構,經過謹慎測試之后,將數據和業務遷移過去。檢查清單:
能否把重構的過程細分成小的迭代過程 , 并且每一次迭代都能得到盡快的反饋?重構過程中的效果能定期的展示給業務部門或領導么?
五、 確定當前的架構狀態
在啟動重構之前,團隊要對當前的架構狀態有清晰的了解,也就是設定好基準,以便評估重構的效果。據我的經驗,負責重構的架構師或者開發者,往往還沒有搞清楚現有的架構設計,就開始重構了,結果經常出現這樣的情況:重構到某個階段,發現行不通,然后一拍腦袋說,哦,原來這塊的架構是這個樣的,是為了達到某某業務需求啊,這塊不能動,得想別的辦法。類似的例子在研發團隊中時有發生,也提醒我們要慎重小心。記得有位哲人說過,了解別人很容易,了解自己很難。檢查清單:
你在重構之前了解過當前的架構設計么? 他們的設計初衷和之前的選型方案知道么?你能給架構設定一個基準狀態么?
六 、 不要忽略數據
數據的重要性不言而喻,業務都是以數據流為載體的,所以架構重構的本質就是對于數據流的重構。數據對重構的重要性主要體現在兩個方面:在重構設計時,需要考慮業務數據的需求,重構之后的系統對于數據的存儲、處理、分析等功能是否有影響;在重構過程中,考慮依靠數據甚至是實際的數據來驗證重構的效果,提供評估的支持。檢查清單:
業務數據的需求在重構設計中有體現么?重構過程中能否通過實際數據來驗證效果?
七、 管好技術債務
技術債務在平常的軟件研發過程中也是比較突出的問題,現在單獨拿出來強調是希望提醒開發者們:架構重構往往是為了償還技術債務,所以請不要在償還技術債務的過程中制造技術債務了。技術債務就像信用卡一樣,會有很高的利息率,就如同給團隊留下了大量的帳務開銷。組織應該培養一種保證設計質量的文化。應當鼓勵重構、同時也應當鼓勵持續設計以及其它有關代碼質量的實踐。在開發時間中應當專門抽出一部分以解決技術債務。如果沒有合適的照料,那么真實世界中的代碼會變得越來越復雜難懂。檢查清單:
團隊對技術債務有跟蹤和備忘錄機制嗎?還是開發人員可以隨意的產生債務?針對技術債務有定期的培訓 、 回顧機制么?
八、 遠離那些虛榮的東西(例如使用“熱門”的技術棧)
架構的重構過程應該是以目標為導向,換句話說“注重實效”。對于技術人來說,一個經常被輕視的問題在于,喜歡追逐新鮮的熱門技術,這其實是個好事情,說明技術人勇于創新,不斷接受新技術。但是對于架構的重構這樣的關鍵性任務來說,是不是新技術并不重要,重要的是能不能實現重構的目標。對于新技術來說,雖然熱度大,但是人才儲備還不足,大家踩過的坑還不多,積累的失敗教訓和成功經驗還不夠,在這種情況下,建議大家不要頭腦一熱就上馬新技術,應該客觀冷靜地評估新技術和成熟技術對架構重構的影響和效果,以數據和經驗來說話,而不要追趕時髦。檢查清單:
重構的技術選型是否有詳實的數據和專家評估?選用的技術是否有良好的人才積累和足夠的經驗支持? 你是不是實驗小白鼠?在技術選型時 , 是否至少有兩個方案待評估? 有沒有重構方案?
九 、 做好準備面對壓力
這條軍規更像是對架構師們的心理建議,軟件開發過程中,壓力無處不在。對于架構重構來說,壓力來源于多個方面:管理層、團隊成員、同級部門等等。說白了,架構重構對個人來說往往是一件出力不討好的事情。和做一個新產品能夠取得很高的贊賞相比,重構的成績往往并不受領導重視,而且出了問題還要承擔很大的責任。從軟件開發角度看,做新產品是從0到1,而架構重構是從-1到1,復雜性和難度通常更大。因此,重構的負責人要提前做好心理準備,舒緩壓力的一個技巧是,設置好里程碑,將重構的成果量化,并且和業務的變化關聯起來,定期向利益相關各方同步狀態,得到大家的理解和支持。檢查清單:
架構的重構是否得到了管理成(特別是最高層) 的支持? 他們是否多重構的時間 、 任務量有直接的認識?你的重構計劃中是否包含了一些可以量化的框架 , 是否定期向領導展示這些成功?
十、 了解業務
雖然看起來像是一句廢話,但是我想Raffi Krikorian特意把這條提出來一定是有理由的。架構重構的最終目的是改進業務,所以對于業務的了解將有助于架構師和技術人確定重構目標的優先級和關鍵路徑。比如,我們需要知道哪些關鍵業務的架構是不能碰的,哪些業務之間是互相關聯的,哪些業務的架構是需要優先重構的…..等等。除了了解業務本身,我們還需要了解“人”,表面上管理層是重構目標的裁決者,但實際上業務部門的人才是。技術人需要了解他們的業務需求,并將其轉化為重構目標。通過這種方式,架構重構的意義才能得到具體的體現。檢查清單:
是否與業務部門就重構能實現的業務目標進行過充分的討論和確認?是否對關鍵的業務和優先重構的業務進行了確認?
十一、 做好面對非技術因素的準備
雖然看起來像是一句廢話,但是我想Raffi Krikorian特意把這條提出來一定是有理由的。架構重構的最終目的是改進業務,所以對于業務的了解將有助于架構師和技術人確定重構目標的優先級和關鍵路徑。比如,我們需要知道哪些關鍵業務的架構是不能碰的,哪些業務之間是互相關聯的,哪些業務的架構是需要優先重構的…..等等。除了了解業務本身,我們還需要了解“人”,表面上管理層是重構目標的裁決者,但實際上業務部門的人才是。技術人需要了解他們的業務需求,并將其轉化為重構目標。通過這種方式,架構重構的意義才能得到具體的體現。檢查清單:
當非技術因數影響重構時, 你是否對目標做了調整并告知了利益各方?你是否準備以開放而不是抵制的心態來對待非技術因素的影響?
十二、 對于代碼質量有所掌握
這和上篇中所提到的“管理好技術債務”有異曲同工之處。架構的重構對代碼質量要求很高,一方面是重構過程對bug的容忍性比新產品的研發更低,另一方面也決定了下一次重構的難易程度。關于代碼質量的書籍和文章已經有很多,在這里只想提醒大家一點:代碼審查是一個非常好的辦法。代碼審查是軟件開發過程中的必要步驟,既可以幫助被審查者提到代碼質量,又可以讓審查者加深對產品的理解。不論團隊多忙,一定要保證代碼提交之前,是經過其他成員審核過的,短期來看會占用團隊的時間,長期來看是事半功倍的好事。檢查清單:
團隊成員是否對代碼質量有足夠的重視? 是否有獎懲措施?團隊內部是否有代碼質量的標準文檔和審查流程?
十三 、 讓團代做好準備
這是Raffi Krikorian列舉的最后一條軍規,是對之前所有建議的總結,我在這里不做解讀了,請大家自我感覺吧。
總結
以上是生活随笔為你收集整理的架构之重构12法则的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。