動(dòng)機(jī)(Motivation)
[函數(shù)搬移]是重構(gòu)理論的支柱。如果一個(gè)class有太多行為,或如果一個(gè)class與另一個(gè)class有太多合作而形成高度耦合(highly
coupled),我就會(huì)搬移函數(shù)。通過(guò)這種手段,我可以使系統(tǒng)中的classes更簡(jiǎn)單,這些classes最終也將更干凈利落地實(shí)現(xiàn)系統(tǒng)交付的任務(wù)。
常常我會(huì)瀏覽class的所有函數(shù),從中尋找這樣的函數(shù):使用另一個(gè)對(duì)象的次數(shù)比使用自己所駐對(duì)象的次數(shù)還多。一旦我移動(dòng)了一些值域,就該做這樣的檢查。
一旦發(fā)現(xiàn)[有可能被我搬移]的函數(shù),我就會(huì)觀察調(diào)用它的那一端、它調(diào)用的那一端,以及繼承體系中它的任何一個(gè)重定義函數(shù)。然后,我會(huì)根據(jù)[這個(gè)函數(shù)與哪個(gè)
對(duì)象的交流比較多],決定其移動(dòng)路徑。
這往往不是一個(gè)容易做出的決定。如果不能肯定是否應(yīng)該移動(dòng)一個(gè)函數(shù),我就會(huì)繼續(xù)觀察其他函數(shù)。移動(dòng)其他函數(shù)往往會(huì)讓這項(xiàng)決定變得容易一些。有時(shí)候,即使你
移動(dòng)了其他函數(shù),還是很難對(duì)眼下這個(gè)函數(shù)做出決定。其實(shí)這也沒(méi)什么大不了的。如果真的很難做出決定,那么或許[移動(dòng)這個(gè)函數(shù)與否]并不那么重要。所以,我
會(huì)憑本能去做,反正以后總是可以修改的。