程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 【重構學習】06 類的重構,重構學習06

【重構學習】06 類的重構,重構學習06

編輯:C#入門知識

【重構學習】06 類的重構,重構學習06


好吧,這一章要不要自己寫一個考慮了很久,貌似還是不寫的好,因為感覺這一章異常的簡單

這一章就是關於類的方法和字段並不合理,所以在搬移方法和字段
1、搬移函數

修改點:一個函數與其所在類外的另一個類進行了過多的交流,調用後者或被後者調用

動機:因為出現上述情況,就會出現高度耦合,   

做法:在該函數最常引用的類中建立一個有著類似行為的新函數,將舊函數變成一個委托函數,或是移除

2、搬移字段

好吧,跟上面那個差不多,實際上也確實差不多

3、提煉類

修改點:某個類做了兩個類的事(就是要單一職責咯)

做法:建立一個新類,將相關的字段和函數從舊類搬到新類

很簡單,但是提煉類是改善並發程序的一種常用技術,因為它使你可以為提煉後的兩個類分別加鎖。

4、去除類

修改點:就像上一章對函數的操作一樣,某個類如果沒有做太多的事情,就存在去除的可能性(通常是之前的重構移走了這個類的責任)

做法:將這個類的所有特性搬移到另一個類中,然後移除原類。

有趣的做法是,將這個類裡的函數都聲明為private,這樣就可以斬斷所有的引用,不過貌似現在的IDE都已經很厲害了,可以很方便找到引用。

5、隱藏委托關系

修改點:客戶通過一個委托類來調用另一個對象

做法:在服務類上建立客戶所需要的所有函數,用以隱藏委托關系

好吧,舉個簡單的例子,周伯通要參加華山論劍,首先他要找到華山這個對象,然後通過這個對象再去論劍,

然後Martin的意思是周伯通現在直接調用華山論劍這個函數,這個函數裡面自己回去調用華山,然後再論劍

你可能會覺得多此一舉,但是這樣就避免了華山這個類的暴露出來,客戶端要知道的是最簡單的東西,而不是暴露一大堆東西出來,他可能就會要理解更多的東西

不利於後來的人的調用這個函數。

6、暴露委托關系(之所以我這麼寫,是為了表示這個東西和隱藏委托關系做法剛好相反,可能更好理解一點)

修改點:某個類做了過多的簡單委托(意思就是說,周伯通這次在華山論劍,下次又在華山喝茶,在下次突然想在華山烤雞,那麼完了,周伯通這個類就要增加三個委托函數,但是

實際上,直接用華山,然後在華山再去論劍,喝茶,烤雞,不必要在華山多了一個爬山之後,又在周伯通類裡面加個華山爬山的函數)

做法:讓客戶直接調用受托類(5和6兩個玩法就是對暴露程度的一種把控,隨著不斷的需求變更或者其它什麼鬼來不斷地去運用5和6以達到適當的暴露成都,為何我寫到這裡總有一種教唆大家去當暴露狂的感覺)

7、引入外加函數和引入本地擴展

所謂引入外加函數就是為你無法修改的類加一個函數時,去建一個函數,把這個無法修改的類的實例作為這個函數的參數

所謂引入本地擴展就是為你無法修改的類加一個函數時,去建立一個新類去繼承這個類,使新類包含這些函數

好吧,這個就不講了,

因為在第二章的時候  第19個重構點不完美的庫類 這個裡面我已經講的很詳細了。

實際上你看到這裡已經可以發現了,基本上我在後來寫的這些東西,在第二章裡面都已經涉及到了,只不過在第二章裡面有的我一筆帶過有的比較詳細而已。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved