|

介紹
前幾篇系列文章,我比較關注的是<php 雜談《重構-改善既有代碼的設計》之一 重新組織你的函數>,但是我覺得我還是沒有說清楚,我自己也有很多不理解的地方,而且這篇是我的第一篇這方面的文章,有很多的紕漏,所以我會經常性的去做修改,如果大家有好的意見不妨告知一、二。
今天談得是“接口”,此接口非“Interface”,而是一個統稱。我們一般可以把供別人使用的函數或者url(一般是用于提供數據)叫接口。――可能還有別的意思,畢竟我現在還屬于“菜鳥”,如果有理解上的錯誤,請指正。
我們知道“容易被理解和被使用的接口”,是開發良好面向對象軟件的關鍵。――本文將介紹“使接口變得更簡潔易用”的重構手法。
題外話:
如果大家覺得我這篇文章太長,看起來麻煩的話,建議大家”就看圖片和粗體的文字“。
昨天,“old“博友給我留言,我以前也沒仔細考慮過,這次我也想了想。留言內容是:
至于簡單,重構的目地也是為了簡單和易理解性。
至于執著,我覺得在技術上,我們很多時候需要這種執著,即使你過后覺得你錯了,但是我們在這之間還是會有所收獲。我們只有經歷過很多次的磨合(這種磨合有正確的也有錯誤的),我們才能知道它的價值,我們才能收獲到我們需要的東西。
至于利益,”Old“是不是指公司利益,恩,確實是,很多時候我們在編碼的過程中,需要趕進度,還有我們在重構中也會有一些錯誤出來,所以我的建議是,在開發之初,你就要在設計和重構中,不斷進行磨合,不要覺得浪費時間,很多時候,好的結構能加速你的開發。
專業術語
狀況:如果函數的名稱未能揭示函數的用途,那么修改函數名稱。
我極力提倡的一種編程風格就是將復雜的處理過程分解成小函數。但是如果小函數的命名不好,這會使你費勁周折卻弄不清楚這些小函數各自的用途。
給函數命名的一個好辦法:考慮應該給這個函數寫上一句怎樣的注釋 -――> 想辦法將注釋變成函數的名稱。
起一個好名稱并不容易,需要經驗。――要想成為一個真正的編程高手,“起名稱”的水平至關重要。
如果你看到一個函數名稱不能很好的表達它的用途,應該馬上加以修改。
Example:
狀況:某個函數需要從調用端得到更多的信息,那么為此函數添加一個參數,讓該參數帶進函數所需信息。
動機:
1、Add Parameter 是一個很常用的重構手法。
2、修改過的函數需要一些過去沒有的信息,因此你需要給函數添加一個參數。
3、除了Add Parameter外,只要有可能,其他選擇都比“Add Parameter”要好,因為有可能其他選擇不會增加參數列的長度。――過長的參數列會使程序員記不住那么多參數。
狀況:函數本體不再需要某個參數,那么將該參數去除。
動機:
1、參數指出函數信息,不同參數代表不同意義。函數調用這必須為每一個參數操心該傳什么東西進去。――如果不去掉參數,那就為每一次調用多費一份心。
2、如果你發現有很多調用者,那么為了不讓調用者操心,你可以這樣做,把要移除的參數設置為某個默認值(如null),這樣調用者只傳那些沒有默認值的參數。
Example:
Example:
Preserve Whole Object 狀況:如果你從某個對象中取出若干值,將它們作為某一次函數調用中的參數,那么改使用(傳遞)整個對象。 動機: 1、參數列更穩固; 2、提高代碼的可讀性;――過長的參數列很難使用,因為調用者和被調用者都必須記住這些參數的用途。
1、一組參數可能有幾個函數同時使用,這些函數可能隸屬于同一個class,也可能隸屬于不同的classes。――這樣的一組參數就是所謂的Data Clump(數據泥團)?! ?、我們可以運用一個對象包裝所有這些數據,再以對象取代Data Clump。――目地:哪怕只是為了把這些數據組織在一起,這樣做也是值得的。 3、本項重構的價值在于“縮短了參數列的長度”。此外,新對象所定義的訪問函數(accessors)還可以使代碼更具一致性。――這又進一步降低了代碼的理解難度和修改難度?! ?、本項重構還可以帶給你更多好處。――當你把這些參數組織到一起之后,往往很快可以發現“可被移植新建class“的行為。――減少重復代碼。 Example:
1、重構往往促使你修改“函數的可見度“。――時刻檢查可被隱藏的函數。 2、經常檢查有沒有可能降低某個函數的可見度(使它私有化)?! 〃D―>當你在另一個class中移除對某個函數的調用時,就應該檢查?! 〃D―>特別對setter函數進行上述的檢查。 Replace Constructor with Factory Method 狀況:如果你希望在創建對象時不僅僅是對它做簡單的構件動作,那么將__construct(構造函數)替換為factory method。
動機:
在subclass過程中以factory method取代type code。――你可能常常需要type code創建相應的對象。
Example:
接著來:
php技術:PHP 雜談《重構-改善既有代碼的設計》之五 簡化函數調用,轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。