最近看了聖殿騎士大哥的重構文章,其中有幾個重構技巧讓我頗有感觸,特此記錄下。
1.封裝集合,返回集合介面型別
這個技巧讓我想起了專案中的**,比如:
1public
class
check29
}1011public
class
detail
1214 }
如果這樣設計,那麼使用者通過呼叫getdetails方法之後就可以對你的集合做任意的改動,這樣的做法是非常危險的,所以必須要改進。
重構原則:返回可迭代器型別介面來保證對集合的封裝,改進如下:
1public
class
check211
12public ienumerableint, detail>>getspecificdetail()
1316}17
18public
class
detail
1921 }
迭代器文章入口:迭代器學習之一:使用ienumerable和ienumerator介面
我將在專案中運用此重構技巧。
2.提取判斷條件作為方法 - 方法名要有意義
當遇到複雜的判斷後,如果沒有注釋,很多人第一眼都不會理解這個判斷是做什麼的。
所以把複雜的判斷條件提取為方法,再取個有意義的名字,那麼別人看一眼就明白做什麼的,比如:
1public
class
check24
5public
void
sendmessage()612
13//
重構後的**
14//
這樣別人就知道這個判斷的作用:判斷當前的資訊有沒有提交
15if
(hasconfirm(getdetail))
1619}20
21public
bool
hasconfirm(detail detail)
2225}26
27public
class
detail
2830 }
3.為帶有大量bool引數的方法重新進行拆分組合
這個重構手法在專案中還沒有用過,方法帶有大量的bool引數本來就很奇葩,不過如果真的遇到了,我們也有應對方法,如下:
1public
class
test
25 }
重構後的**:
1public
class
test28
9public
void
createb()
1013
14public
void
createc()
1518
19private
void create(bool isa, bool isb, bool
isc)
2021 }
4.避免雙重否定
其實這個重構手法我理解為盡量避免使用在if條件裡使用 - 「!」.
因為如果本來你的判斷條件就是表達否定的意思,那麼在加上乙個否定的判斷,那麼就會是雙重否定。
那別人理解起來是不是會很抓狂,他會在心理畫個圈圈狠狠的詛咒你的,:-),比如:
1public
class
test211
}1213public
bool nopayment
14 }
重構後的**:
1public
class
test211
12//
重構後的**
13//
避免使用雙重否定來作為判斷條件
14if
(haspayment)
1518}19
20public
bool nopayment
2122
public
bool haspayment
23 }
5.盡快返回 - 返回值
這個重構技巧可以分解複雜的判斷條件,是那些冗餘的判斷分支化成簡介的小分支,比如:
1public
class
testone218
}19}20
}21}22
}2324public
class
detail
2527 }
重構後的**:
1public
class
testone215
}16}17
18public
class
detail
1921 }
以同步至:個人文章目錄索引
CUDA學習(三十三)
最大化指令吞吐量 為了最大化指令吞吐量,應用程式應 在本節中,吞吐量以每個多處理器每個時鐘週期的操作次數給出。對於32的變形大小,一條指令對應於32個操作,所以如果n是每個時鐘週期的運算元,則指令吞吐量是每個時鐘週期n 32條指令。所有的吞吐量都是針對乙個多處理器的。它們必須乘以裝置中的多處理器數量...
學習總結 三十三
1 什麼是守護程序 程序是乙個正在執行的程式,守護程序也是乙個程序,守護程序的意思就是乙個程序保護另乙個程序 2 守護程序使用場景 1 什麼是互斥鎖 互斥鎖就是互相排斥的鎖,乙個資源被鎖了,其他子程序就無法使用 2 為什麼需要互斥鎖 因為併發帶來的資源競爭問題,當多個程序同時要操作乙個資源將會導致資...
Python學習之旅(三十三)
網路通訊是兩台計算機上的兩個程序之間的通訊,而網路程式設計就是如何在程式中實現兩台計算機的通訊 p協議負責把資料從一台計算機通過網路傳送到另一台計算機 tcp協議則是建立在ip協議之上的。tcp協議負責在兩台計算機之間建立可靠連線,保證資料報按順序到達 許多常用的更高階的協議都是建立在tcp協議基礎...