Pages

Friday, January 14, 2011

Improving the design of existing code

Designers 設計師常常把 Refactor 用在錯意,跟它本身的含意有差距。在 37signals 有一篇介紹 "Refactoring for designers" 這樣心得感想。設計師可能一再聽到程式設計師講這詞彙,但是沒有真正瞭解它的意思。所以這篇文章即是在解釋這詞彙的好處與含意讓設計師可以了解。

設計師怎麼樣誤解呢?他們會想成『重新安排新設計』、『小調整而沒有完整大思考』等等模式。Refactoring 實際上是別的意思,它意思是改變設計的方式,而卻不改變它外面看到的部份。在簡單說即是,今天做完了 Refactor,使用者是不知道的,但是對於設計面而言,將後面做的更有彈性、更乾淨清楚,讓未來加上新功能可以更加的順利等等目的。

程式設計方面有這本書叫做 Refactoring,Improving the Design of Existing Code。這本書裡面除了解釋什麼是 Refactoring 意義之外,包含了兩個最重要概念以及些程式設計上的技巧與試用時機。

Refactoring (noun): a change made to the internal structure of software to make it easier to understand and cheaper to modify without changing its observable behavior.

第一個概念是想要做 Refactoring 之前,先寫好單元測試。單元測試通常是測試程式一對一方式來測試我們寫的每一個單一獨立的主程式,此目的是確保今天寫的程式是對的、自己瞭解要開發哪些功能,與開發前過程中可以對功能範圍一定程度上的瞭解。如果程式是盾,那麼測試程式就是矛,由矛來攻擊盾,確保盾 (程式) 是穩固的。好,單元測試寫完可以當作程式的資產,它可以搭配自動化測試 Auto-testing 來輔助瞭解自己開發上是否有在正軌上。而這麼大的資產用在 Refactoring 上,可以做到如果程式的翻動,是否可以撐的住矛的攻擊,因為功能不變照道理說測試程式是可以繼續跑的。而在將程式碼翻修整理、拆解 Class、合併 Method 等等技巧的一路上,都能確保程式依然是穩定的。我們當然不希望改東邊壞西邊、改西邊壞南邊的狀況發生,而測試程式即是這時候的幫助,也是程式開發人員平日要投資的。

第二個概念是兩頂帽子,當決定要 Refactoring 導入開發時候,要把時間切分成兩部份,而且一次只能戴一頂。第一個部份是加上新功能新程式碼,第二個部份是 Refactoring,為既有的功能做結構改造 Restructure。採用這樣習慣,如此一來才能確保自己的程式碼可以穩定的前進,開發上開發人員自己也不會一團亂,穩健的前進同時隨時都可以交付出穩健的程式版本。

Refactoring 是一個很好的設計工具,他可以幫忙協助我們的程式碼將內部行為改造,讓未來可以更好維護與增進。以上如果是介面設計師想要瞭解更多可以參考 37signals 部落格文章 Refactoring for designers Ryan Jan 12,或者是程式設計師我推薦 Refactoring - Improving the Design of Existing Code 這本書。

No comments:

Post a Comment