重构简介
重構簡介
? ? ? ? ? 我們一直在說,機房收費系統個人重構版,那么到底什么是重構?
? ? ? ? ??重構Refactoring:就是通過調整程序代碼改善軟件的質量、性能,使其程序的設計模式和架構更趨合理,提高軟件的擴展性和維護性。
? ? ? ? ? 重構的必要性
? ? ? ? ??一個軟件總是為解決某種特定的需求而產生,時代在發展,客戶的業務也在發生變化。有的需求相對穩定一些,有的需求變化的比較劇烈,還有的需求已經消失了,或者轉化成了別的需求。在這種情況下,軟件必須相應的改變。
? ? ? ? ??為了實現變更,不可避免的要違反最初的設計構架。經過一段時間以后,軟件的架構就千瘡百孔了。bug越來越多,越來越難維護,新的需求越來越難實現,軟件的架構對新的需求漸漸的失去支持能力,而是成為一種制約。最后新需求的開發成本會超過開發一個新的軟件的成本,這就是這個軟件系統的生命走到盡頭的時候。
? ? ? ? ??重構目標
? ? ? ? ??1、改進軟件設計使軟件更容易被理解
? ? ? ? ??2、幫你找到bug
? ? ? ? ??3、提高軟件的開發速度
? ? ? ? ??重構時機
? ? ? ? ??1、在添加新功能時進行重構。
? ? ? ? ??2、在修改bug時進行重構。
? ? ? ? ??3、在代碼復審時進行重構。
? ? ? ? ? 提高性能
? ? ? ? ??提高性能的三種方法:
? ? ? ? ??時間預算法——在設計時就對程序花費的時間進行預算,通常用于性能要求極高的實時系統.普通的企業應用程序一般對性能要求不高.只要不太慢就可以了。
? ? ? ? ??持續關注法——要求程序員在任何時間都要設法保持系統的高性能.這個方法有個缺陷,就是大部分的程序90%的優化工作都是白費勁,這樣會浪費大量的時間。
? ? ? ? ??良好的分解方式——這個方式是在開發程序階段不對性能投以任何關注,直到進入性能優化階段,再分析程序中性能差的程序,然后對這些程序進分解,查出性能差的程序,進行優化。
? ? ? ? ??使用間接層
? ? ? ? ??所有的軟件設計的問題都可以通過增加一個抽象的間接層而得到解決或者得到簡化,存在一種說法就是:通過簡單地增加另外一個間接層就可以解決軟件的任何問題。
? ? ? ? ??間接層的存在的價值:允許邏輯共享;分開解釋意圖和實現;將變化加以隔離;將條件邏輯加以編碼。
? ? ? ? ??但是過多的間接層會導致代碼的層次太深,使代碼難以閱讀.因此要權衡加入間接層的利弊。
? ? ? ? ??重構難題
? ? ? ? ??關系數據庫與面向對象編程的問題——在對象模型和數據庫模型之間插入一個分隔層,這就可以隔離兩個模型各自的變化.升級某一模型時只需同時升級上述的分隔層即可,這樣的分隔層會增加系統復雜度,但是能增加靈活度。
? ? ? ? ??修改接口的問題——修改已發布的接口,因為已發布的接口會供外部人員(其它公司)使用,因此,修改接口會導致引用接口的其它程序不修改程序就無法運行.修改接口的最好的辦法是增加一個新的接口,讓舊接口調用新接口.這樣原來的程序就不用修改了,對于接口的另一個建議是盡量不要發布接口。
? ? ? ? ??重構的原因:
? ? ? ? ??1、?臃腫的類
? ? ? ? ??類之所以會臃腫,是因為開發者缺乏對最基本的編碼原則,即“單一職責原則”(SRP)的理解,這些類往往會變得很臃腫,是由于不同的且在功能上缺少關聯的方法都放在了相同的類里面。
? ? ? ? ??2、長方法
? ? ? ? ??方法之所以會變得很長主要是有以下幾個原因:
? ? ? ? ??許多沒有關聯性的、功能復雜的模塊的代碼都放在相同的方法內。這主要是開發者缺乏SRP的概念,多種條件都放在同一個方法內,這在長方法內經常會發生的。這是由于缺乏McCabe代碼復雜度和SRP的概念的比較。
? ? ? ? ??3、大量的傳參
? ? ? ? ??我經常遇到這幾種情況,一些方法跟另一些方法進行交互,或者調用另一些方法的時候傳入大量的參數。這就會出現如果更改了其中一個參數,就得在多個方法內進行更改。
? ? ? ? ??4、常量值無處不在
? ? ? ? ??經常會發現開發者(尤其是新手)會使用一些具有明確含義的常量值(主要是魔鬼數字),但沒有給它們賦予合適的常量變量。這會降低代碼的可讀性和可理解性。
? ? ? ? ??5、模糊的方法名
? ? ? ? ? 設計與重構的關系
? ? ? ? ??重構與設計是互補的,程序應該是先設計,而在開始編碼后,設計上的不足可以用重構來彌補。
? ? ? ? ??設計應該是適度的設計,而不必過度的設計,如果能很容易的通過重構來適應需求的變化,那么就不必過度的設計,當需求改變時再重構代碼即可。
總結
- 上一篇: SqlServer数据类型
- 下一篇: UML之构件图