refactoring Patterns:第四部分 | ||||
石一楹 ([email protected]) 任何一種技術都不是萬能的。正象設計模式,合理的運用可以極大地提高設計的效率和美感,再不適當的場合運用就會產生所謂的反模式。我們的refactoring亦然。 但是,作爲一種強有力的設計演變工具,refactoring值得我們付出努力。不能因爲對新技術的恐懼而放棄這樣的工具,我在這裏對可能出現抗拒情緒的一些問題進行了解釋。 程序原型 要最小化這種將原型直接變爲產品的風險,一個辦法就是選用一種特定的語言或工具來構建你的原型,而你絕不會使用這種語言或工具完成你的最終產品。 由於原型從根本來說,不會有意考慮以後的變化和程序的結構,對原型做Refactoring是不可能也是毫無必要的。 程序不能工作 這裏並不排除使用Refactoring可以排除bug,但那是在程序的絕大部分主要功能已經實現的情況下。 接近底線 但是這個問題可以有另外一種考慮的思路,爲什麼會出現這種情況?是因爲估算嚴重失誤還是因爲效率太低?如果效率太低,你怎樣來提高效率?Refactoring是一種提高生產力極好的方法,因爲它使設計更好,從而使得變化更快。所以,如果你發覺時間可能不夠,往往就是需要Refactoring的一個信號 實施 Refactoring 可能碰到的阻礙以及解決方案 因此,這類技術的支持者可能會驚異於(失望於)這個世界沒有人來敲他們的門。 接着,他指出即使已經意識到長期的利益,但人們還是不情願使用這種方法的四個關鍵理由: "我不理解如何應用你的方法 。" "你的方法只能得到長遠利益,爲什麼要在現在竭盡努力?從長遠的角度來看,我可能不再是這個項目或這個組織的一員了" 你的方法是一種開銷活動,我是受僱來編寫新特性的" "如果我們應用了你的方法,我們已有的實現可能以不刻預期的方式變化或中斷。可性度和向後兼容性對我們很重要".這些問題其實並不單單存在於Refactoring領域,在鼓勵人們設計、編寫更重用的系統時,我們也必須解決這些問題:
學習 Refactoring已經被有經驗的OO程序員成功地使用了10多年。這些程序員也把他們Refacorting的經驗反饋給了OO社團。 本文旨在爲你提供一個導引,在學習了這篇文章後,你可以沿着以下幾個方向進行深入:
另外,在我的主頁www.erptao.org上,你可以:
Refactoring獲得短期效益 伊利諾斯大學研究小組的CHOISE操作系統框架是這些研究的一部分。其中,CHOICE實現了對System V,MS-DOS,BSD UNIX等差別極大的不同文件系統的支持。在開發過程中應用Refactoring後,研究者指出refactoring確實能夠獲得不少短期和長期的利益。 對於近期而言,因爲排除了重複代碼,在通用代碼測試中發現的錯誤只需要在一個地方進行修改。代碼總量變小。與一個特定文件系統格式相關的代碼與適合於兩個或幾個文件系統通用的代碼隔離。 對於中期而言,來自於refactoring的抽象通常爲以後其他的文件系統提供了方向。事實上,對兩個現有文件系統的抽象不一定完全適合於第三個文件系統,但是已經存在的通用代碼是一個有價值的起點。後續refactoring應用的結果將顯示什麼是文件系統真正的抽象。框架開發小組發現,隨着實踐的推移,加入一個文件系統所需要的努力越來越少。即使後來的文件系統更復雜,開發者更加缺乏經驗。 削減Refactoring的額外開銷
你可以在internet上找到很多這樣的報告,後面很多內容也都談到了這個問題。 安全Refactory
各種各樣的書籍、資料、論文、期刊可以增強你的編程能力,能夠教給你更多的良好風格。Martin Fowler的《Refactoring》就是這樣一本書,他告訴我們Refactoring有非常細小的一步一步組成,每一步看起來都不起眼,但是一系列Refactoring的結果會對系統產生有力的影響。 編譯器、好的風格、測試套件、Code Review都是非常有價值的,但是所有這些方法方法都有他們的問題,編譯器根本不知道程序的動態行爲,好的風格、Code Review完全依靠人來實現,而任何一個人都會犯錯誤。測試套件也沒有辦法覆蓋所有的行爲。 所以,面向軟件社團對Refactoring的一個重要研究方向,就是定義Refactoring安全性方面的理論並實現這種理論支持下的工具。它們可以用來檢查某一種Refactoring是否能夠安全地應用到一個程序,如果安全的話,那麼就有工具來完成Refatoring。這樣做也避免了手工完成可能引起的bug。
|