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