如果將乙個軟體系統或專案比喻成乙個國家,那麼重構就好比是改革,推翻老的系統,重寫乙個新系統就好比是革命。重構就是戊戌變法,重寫就是辛亥革命。革命總是比改革要付出更多的代價,因為革命是要流血的。重寫乙個系統也是如此,要付出比重構更大的代價,因為原有的**基本上全拋棄,公司曾經為那些編寫老系統**的程式設計師支付的工資就全付之東流了。但是,國內大部分軟體公司仍然每隔三四年就上演一次這樣的悲劇。究其原因,乃是不知道用重構這樣小的代價去改善既有**的設計。即便聽說過重構,但卻對重構的技巧、本質和意義一知半解,結果往往打著重構的旗幟,卻做著重寫的工作。
重構是每天都應該做的工作。那些說「等我們n.x版本發布以後,有時間了,我們好好重構一下整個系統,這個系統中的**太亂了」,這不是重構。既然知道**亂,有壞味道了,就應該立即著手重構。
重寫往往是從來不重構造成的,**越來越臃腫、冗餘、混亂、腐朽,設計上發現的漏洞越來越多,實在無法在原有系統上維護和擴充**了。於是開始所謂「重構」,卻發現無從下手,無法完成,只好重寫。這好比乙個朝代無法延續了,於是來一場起義,建立乙個新王朝,時間長了,又陷入腐朽,又被推翻,周而復始。人事間的事往往都如此,新系統寫好後,三五年後又是推到重寫。
為什麼從來不重構呢?國內的公司很多還處於瀑布開發模式的思維中,認為設計階段完成後是編碼階段,編碼階段是不能修改設計的。目前先進的軟體工程思想如敏捷開發都是迭代開發模式,設計是在多次迭代的過程中逐步完善的。尤其是xp程式設計,完全沒有設計階段的概念,這對很多國內的軟體開發者是個革命性的思想。
事實上,國內的軟體設計者大多從業時間不長,工作兩三年就敢做一些複雜系統的架構設計,經驗、技術和能力的不足導致他們的設計往往是拙劣、醜陋和低效的,漏洞百出。瀑布開發模式往往有形無實,到測試和維護階段總是能發現設計上致命的問題。這時要去改正這些設計錯誤,需要修改**。但**往往是混亂和低質量的,查錯困難,修改的難度非常大。大部分專案經理往往是採取一種治標不治本的辦法解決問題,而不去驚動原有的設計。最後導致設計的問題積累得越來越多,直到所有的人都無法忍受了,就重寫。
這其中涉及到編碼過程中的質量控制和**評審的問題,大部分軟體公司都沒有**評審,也沒有別的**質量控制的辦法。其次,如果**質量還可以忍受,因擔心重構後不能保證原有的功能和特性而不敢重構,這就涉及到敏捷開發原則中提到的乙個原則:勇氣!大多數程式設計師似乎都缺乏這個特質——勇氣,是的,改變的勇氣。雖然勇氣不是個技術問題,但沒有勇氣,重構也是無法完成的。
做什麼事情都需要勇氣,不僅僅是開發軟體!
什麼是系統重構
前面我們提到了,面對軟體工業時代的到來,我們的軟體企業陷入了一種更深的迷茫之中,一種 後有追兵,前有懸崖,進退兩難 的境地。後有追兵 面對維護了數十年之久的大型遺留系統,我們到底改還是不改?不改,面對越來越多的需求變更,我們維護的成本越來越高,變更變得越來越困難 面對不斷湧現的新技術,使我們的系統顯...
什麼是url重寫
url 重寫是擷取傳入 web 請求並自動將請求重定向到其他 url 的過程。比如瀏覽器發來請求 hostname 101.aspx 伺服器自動將這個請求中定向為http hostname list.aspx id 101。url重寫的優點在於 l 縮短url,隱藏實際路徑提高安全性 l 易於使用者...
身體是革命的本錢
來上海快2年了,昨天第一次去醫院。很小的毛病而已。但是當進入醫院大樓的那一刻起,我明顯感覺到不適。很排斥。來來往往的醫生 病人和穿插在其中的保安。填表 辦卡 排隊.詢問 溝通 爭吵 不是我 還有那滿目的科室標示和顯示屏.對了,人好多啊!我突然再次體會到了那個道理 身體是革命的本錢!無論做什麼事,無論...