重新组织函数--《重构》阅读笔记
1)尋找引用點時,最好使用工具,然后再人工review。在看到這個問題的時候,我估計應(yīng)該是很久之前了。現(xiàn)在用IDE。這個要方便很多。
2)重新組織函數(shù)的方法和目標(biāo)。
其實目標(biāo)很簡單。就是消滅長函數(shù)。
? 常用方法
? Extract method
? Inline Method
? Replace Temp with Query
? Temporary Variable
? Replace Method with Method Object
? Remove Assignments to Parameters
? Substitude Algorithm
3)Extract Method
?? 1.這個方法看起來很簡單。實際上也是很簡單的。我覺得這里的技巧,或者說難度,還是在于對業(yè)務(wù)邏輯能夠合理的拆分。
?? 2.看到這么一句話,如果說函數(shù)足夠小。那么高層函數(shù)其實起來像是注釋。
????? 這個讓我想起了以前和同事就Extract method這個問題討論。反對派的觀點主要是集中在復(fù)用度上面。覺得有些方法,即使抽出來,很難復(fù)用。但是這句話,很好的反駁了他們。Extract method可以是讓以“注釋”的方式,讓代碼更加可讀。
4)Remove Assignment to Parameters.
?? 1.這個方法還是挺簡單的。就是把局部方法壓入Extract Method。唯一比較麻煩的是返回值需要有多個值的時候,可以用Replace Temp with Query 和 Replace method with Method Object來解決。
5)Inline Method
?? 1.書中提到了兩個原因要用到這種重構(gòu)方式。
??? 第一種,函數(shù)太簡單,個人覺得用處不大。因為函數(shù)一個很重要的目的是封裝變化。這么做就和這個目的背道而馳了。
??? 第二種,就是為了重新重構(gòu)做準(zhǔn)備。需要回復(fù)到比較原始的狀態(tài)。就好像倚天屠龍記中,俞三俠要用黑玉斷續(xù)膏重新接骨,要把老傷打斷,一個道理。
6)Inline Temp
?? Inline Temp多半是作為Replace Temp with Query的一部分來使用的。
?? 我覺得這個重構(gòu)手法單獨的用處不大。或者說只有極度喜歡減少代碼行數(shù)的人喜歡使用。我不是其中的一員。我不覺得代碼行數(shù)越少,就代碼可讀性就越高。但是現(xiàn)實中,你總是會碰到一些人會問。可以寫成一行的,為什么要寫成兩行?
??? 我比較贊同書中的說法,除非影響到以后其他的重構(gòu)方法,否則還是不要做得好。
7)Replace Temp with Query(以查詢?nèi)〈R時變量)
??? 1.用方法來減少臨時變量,變量變成返回值。
??? 2.Splite Temporary Variable
?????? Separate Query From Modifier
??? 3.只被復(fù)制一次的臨時變量。超過一次用Splite Temporary Variable
??? 4.第一次看到這個名字的時候,我還是比較排斥,或者說不喜歡這種重構(gòu)方式的。因為覺得這個增加運算的次數(shù)。很多時候。用個變量存儲方法返回值,是減少運算次數(shù)。但是看了例子之后,發(fā)現(xiàn)其實他的核心是解決局部變量阻擋Extract Method。就好像是依賴注入一樣。當(dāng)一個值是被“注入話,移動它也就方便很多了。
8) Introduce Explaining Variable(引入解釋性變量)
將復(fù)雜表達(dá)式(或其中一部分)的結(jié)果放進(jìn)一個臨時變量,以變量名稱來解釋表達(dá)式的用途。
覺得這個方法和Extract Method區(qū)別不是很大。
9)split Temporary Variable(分解臨時變量)
你的程序有某個臨時變量被賦值超過一次,它既不是循環(huán)變量,也不被用于收集計算結(jié)果。那么針對每次賦值,創(chuàng)造一個獨立,對應(yīng)的臨時變量。
1,看了那么多,覺得核心思想是對臨時變量進(jìn)行控制,除了一些列外(循環(huán)變量和結(jié)果收集變量),盡量越少越好,即使有,也是一次賦值。
2.? 這個其實是一個中間方法,主要還是減少局部變量在重構(gòu)時的障礙。
10)Remove Assignments to parameters(移除對參數(shù)的賦值)
? 就算沒有重構(gòu)的原因,這個也是不該發(fā)生的。
11)Replace Method with Method Project(以函數(shù)對象取代函數(shù))
??? 將這個函數(shù)放進(jìn)一個單獨的對象中,如此一來,局部變量就成了對象內(nèi)的字段。然后你可以再同一個對象,將這個大型的函數(shù)分解為多個小型函數(shù)。
??? 1)在看了這個例子中,其實還是覺得有點復(fù)雜,但是怎么說呢,意思到了。把其中一些復(fù)雜的邏輯封裝在一個“容器”中。
12)Subsitute Algorithm(替換算法)
將函數(shù)替代另一種算法。
這個其實還是很簡單的。不過這個不能算是重構(gòu)的“技巧”了吧。
轉(zhuǎn)載于:https://www.cnblogs.com/chandlersong/p/3768732.html
總結(jié)
以上是生活随笔為你收集整理的重新组织函数--《重构》阅读笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我理解的Hanlder--android
- 下一篇: PDF数据防扩散系统方案