首次看到移交到我手上的c++工程那個7千多行**的檔案時,既佩服又擔心,前輩的構架能力讓我甘拜下風,同時擔心能不能勝任。
在研究原始碼的時候,也解決幾個線上遺留的問題。愈發覺得有重構的必要——因為這將是我負責的**。
不完全重構——那叫重寫,一是否定了前輩的功勞,二是接觸不久業務不熟,風險大。
因此總體原則是逐步重構,部分重構塊——比如核心模式,一些演算法優化。對於整體流程和部分魔幻式**,不敢動。
在重構過程中,順便編寫測試用例,以保證重構前後結果一致。
引數檢查及出錯處理,統一提前到初始化介面,即新建init函式。原始系統在**深處的不同地方做判斷。出錯盡早返回,不使用深巢狀。
引數統一化。如時間,傳入為「yyy-mm-ddthh:mm:ss」形式,在**中需要時間差的地方,轉換為time_t格式,再計算。現統一在初始化介面中先轉換。在最終轉出時間,再轉換為字串。
去掉冗餘不必要的多餘演算法步驟。
最短路徑,在找到終點節點時,即返回,不用再遍歷,節省時間。
深入研究最短路徑的業務使用,調整計算步驟,減少遍歷時次數。
將部分 c 風格的**必為 c++ 風格(非全部)。
在部分結構體中新增建構函式,去掉 malloc 方式申請記憶體以及用 memset 初始化,設定好欄位預設值,避免多處單獨欄位的賦值。
新增 yaml 配置檔案,將編譯依賴改為執行時依賴。
新增結構體比較函式,輸出不同字段,方便新舊介面的對比。
不拘泥於語言本身,如 c++ **也可以用 printf 輸出,一是筆者習慣,二是格式化比 cout 容易寫。
新增額外的測試用例,方便實驗測試人員參考。
耗時和記憶體占用均有所減少。新舊介面的執行,原介面平均為25ms,新介面為3ms。
同乙個介面,根據時間的不同,使用兩套不同命名空間的引數,未找到好的解決辦法。
如何做乙個更好的重構工程師
參加杜瑤的分享 如何做乙個更好的重構工程師,如何寫更好的html css 主要收穫有 1 table 預設情況下,載入完最後乙個單元格的內容才會去渲染整個 效能降低,所以建議使用table layout fixed 4 行內元素不能設定高與寬 這句話是錯的。行內置換元素擁有自己的外觀,可以改變自己的...
如何重構乙個系統
發現乙個很有意思的情況,做系統寫 多年了,遇到的需求基本上是在已有的系統上實現,從頭來實現的系統基本上沒有。無論是從頭是實現乙個系統,還是維護乙個系統,當時實現的技術可能是最先進的 規劃的產品邏輯是合理的,隨著時間的發展 開發人員的變更 系統的 質量會逐漸腐化,加個feature太麻煩,改個bug涉...
乙個小結吧
最近準備換個公司,開始做一些整理,所以我就在想,從9.6號大一入學到現在,這麼多年我都經歷了什麼?李笑來有本書 七年就是一輩子 我想,我的這五年,其實也是過了一輩子的感覺,在若干年後,想起來,也可能會感謝讓我變的努力的這幾年 高考完後,從未想過,會變成如今這樣,曾一度認為我會去踏遍世界各地,將所有的...