目前的軟體並不是自動產生的,但是我們都知道軟體將會一代代地發展下去。那麼,為什麼我們不努力於自動產生的軟體?為什麼不努力於創造能夠一代代自動生長或發展使用的軟體而卻致力於改變現有的?目前我們所擁有的哪些技術能夠支援產生的軟體而遺忘了哪些技術呢?對這些問題的回答可能還不存在,但是VS 2005中已經具有一些能力來支援產生的程式碼了。
在Visual Studio 2005中,你可以使用宏來為你書寫代碼。這些宏代碼產生器並不是隨便產生的,而你也不必憑想象和發明來構劃要寫什麼樣的宏。兩個獨立但仍有聯絡的研究領域-設計模式和重構-明確地提供了許多的選擇用於書寫易理解的,具有良好文檔的代碼產生器(代碼產生與產生的程式碼並不是一回事,這是在使用宏引擎時所必須要理解的)。本文將向你展示怎樣使用Visual Studio 2005中的宏引擎建立一個代碼產生器來為VB.NET實現重構封裝欄位。
二、重構:封裝欄位
重構是一個為提高代碼實現品質的定義過程。具體地說,重構是在不改變軟體現有功能的基礎上,通過調整程式碼改善軟體的品質、效能,使其程式的設計模式和架構更趨合理,提高軟體的擴充性和維護性。在最簡單意義上,重構從代碼中提取了一些主觀性。作為軟體工程師,我們不必再依賴於輿論和意志力來判斷編碼是好的還是不好的;我們能運用一個客觀的標準並同意重構的代碼優於非重構的代碼。
就象設計模式一樣,重構是命名的代碼模式,帶有充分的描述,指令,要想達到的結果。任何一個程式員,不管是否有開發經驗,都能讀取相應的描述,並象遵循醫生的處方一樣使用預先確定的指令,並取得可以預料的進步。
一個重構的例子稱作封裝欄位。封裝欄位意指,使欄位名成為私人的並通過公用的屬性方法來限制到這些欄位的存取。限制到一對象的狀態的存取優於無限制的存取,封裝欄位正是基於相信對資料的限制存取所具有的價值(有些人可能還不同意基本的前提-有約束的存取優於自由的存取-而有些人還認為基於對象進行設計並沒有多少好處,更不用爭論重構是良性的還是非良性的問題了。不過,本文假定是良性的重構)。
三、實現宏
如果你正處於Visual Studio 2005的一個C#工程上下文中,那麼一定會存在一個重構菜單。而在VB.NET工程上下文中,是不存在這樣的菜單的(至少到目前發行的beta 2版本中是如此)。然而,你能容易地為VB.NET仿效這種支援的行為-例如通過書寫一個輕量級的代碼產生器來實現封裝欄位(或其它重構)。
為了實現封裝欄位,自動化下列步驟:
1. 選擇一個欄位,不需要一個一致的屬性方法。
2. 把欄位的存取修飾詞改成private。
3. 稍微改變一下該欄位名以避免屬性衝突(使用任何你喜歡的習慣)。
4. 產生getter/setter屬性方法以及一些代碼已提供對該欄位的存取。
提示:開始用宏進行工作的一個好辦法是開啟宏記錄器,完成一項任務,進而分析在整合式開發環境中產生了哪些宏語句。然後,再進一步歸納錄製下的宏。