在不改變軟體可觀察行為的前提下,使用一些重構的手法,提高**可讀性。
換句話說,在保持軟體可用的前提下,修改**使得更加容易被理解。
為了後續的**維護和修改,易讀是重構的核心價值。
除此之外,重構隨之帶來的好處有:
總而言之:重構的門檻遠遠沒有想象中那麼高,重構是對既有**的修改,也許我們在無意識中就已經做了這樣的工作,一方面繼續保持良好的程式設計習慣,另一方面學習更加成體系的重構手法。
就如同重構的定義,在可用的前提下,提高重構的技術。
什麼時候不應該重構?
對於一段凌亂的**,如果不需要修改它,就不需要重構。
只有當你需要理解其工作原理時,重構才變得有價值。
如果重寫比重構更加容易,那就不需要重構了。(判斷)
「畢竟生活裡很少有晴空萬里的好事」
——martin fowler
先新增新功能再重構,還是先重構再新增新功能,這不是乙個對錯的問題,而是乙個取捨的分叉口。
martin fowler的回答醍醐灌頂,作為程式設計師往往對**庫的整潔有著極高的追求,以技術去驅動重構沒有錯,但現實世界往往取決於經濟。
「重構的意義不在於把**庫打磨的閃閃發光,而是純粹經濟角度出發的考量。」
「重構應該總是由經濟利益驅動。」
除了重構之外,現在的團隊開發,前後端分離等等,不僅是技術發展的必然結果,同時也是經濟化必然的結果。同樣的場景,是否重構更多取決於經濟條件。
修改函式宣告和呼叫可能也會遭遇宣告者無法修改呼叫者**的許可權問題。
martin fowler推薦的是團隊**所有制。對於跨團隊的相容,可以採用類似github上開源的模型。
(在強**所有制和混亂修改的折中)
在隔離的分支上工作的越久,需要完成的整合工作就越困難。
持續整合(ci:continuous integration):也稱基於主幹開發。為了避免彼此分支差異過大,每個團隊成員每天至少向主線整合一次。
建立一套完備的測試套件,並且需要快速執行。
準備這套測試套件的代價很高,但收益也是可觀的:
重構可以很好的理解遺留系統,但同時又是十分危險的。
再次推書了,hhh《修改**的藝術》:運用重構手法創造出接縫,在接縫處插入測試。(當然,具有一定風險)
flower先生的同事發明了一套漸進式資料庫設計和資料庫重構的方法.......
(看書就好像布置家庭作業一樣。。。難頂)
重構:使**更易讀
效能優化:使**執行速度更快
先寫出可調優的軟體(重構),然後對其調優達到足夠的速度(效能優化)。
關於效能優化:現狀——大半時間都花在了一小段**上。
使用乙個度量工具監控程式的執行,找出效能熱點的一小段**集中調優。
intellij idea可以自動重構的......(說明我對這個工具的利用程度還不夠高)
Chapter 2 重構的原則
在不改變軟體可觀察行為的前提下,使用一些重構的手法,提高 可讀性。換句話說,在保持軟體可用的前提下,修改 使得更加容易被理解。為了後續的 維護和修改,易讀是重構的核心價值。除此之外,重構隨之帶來的好處有 總而言之 重構的門檻遠遠沒有想象中那麼高,重構是對既有 的修改,也許我們在無意識中就已經做了這樣...
《重構》 2 重構原則 讀書筆記
1 重構不只是整理 而是一種更搞笑且受控的 整理技術。2 但必須對軟體 可受觀察之外部行為 只造成很小變化,或甚至不造成變化。與之形成對比的是 效能優化 和重構一樣,效能優化通常不會改變元件的行為,只會改變其內部結構。但是兩者出發點不同 效能優化往往使 較難理解,但為了得到所需的效能你不得不那麼做。...
chapter2 演算法 程式的靈魂
資料結構 對資料的描述。演算法 對操作的描述。演算法 資料結構 程式 2.1什麼是演算法 演算法 廣義上,為解決乙個問題而採取的方法和步驟。計算機演算法分為兩類,非數值演算法和數值演算法。2.2簡單的演算法舉例 例2.11 2 3 100 從這個例子裡面,給出了新的思路,也就是迴圈的概念。通過迴圈能...