重構手法12:Extract Class (提煉類)

來源:互聯網
上載者:User

 

某個類做了應該由2個類做的事。建立一個新類,將相關的欄位和函數從舊類搬移到新類。

動機:一個類應該是一個清楚地抽象,處理一些明確的責任。但是在實際工作中,類會不斷成長擴充。你會在這兒加入一些功能,在哪加入一些資料。給某個類添加一項新責任時,你會覺得不值得為這項責任分離出一個單獨的類。於是,隨著責任不斷增加,這個類會變得過分複雜。很快,你的類就會變成一團亂麻。

這樣的類往往含有大量函數和資料。這樣的類往往太大而不易理解。此時你需要考慮哪些部分可以分離出去,並將它們分離到一個單獨的類中。如果某些資料和某些函數總是一起出現,某些資料經常同時變化甚至彼此依賴,這就表示你應該將它們分離出去。一個有用的測試就是問自己,如果搬移了某些欄位和函數,會發生什麼事?其他欄位和函數是否因此變得無意義。

另一個往往在開發後期出現的訊號時類的子類化方式。如果你發現子類化隻影響類的部分特性,或如果你發現某些特性需要以一種方式來子類化,某些特性則需要以另一種方式子類化,這就意味著你需要分解原來的類。

做法:1、決定如何分解類所負的責任。

       2、建立一個新類,用以表現從舊類中分離出來的責任。如果舊類剩下的責任與舊類名稱不符,為舊類更名。

       3、建立“從舊類訪問新類”的串連關係。有可能需要一個雙向串連。但是在真正需要它之前,不需要建立“從新類通往舊類”的串連。

       4、對於你想搬移的每個欄位,運用 Move Field (搬移欄位)搬移之。

       5、每次搬移後,編譯、測試。

       6、使用Move Method (搬移函數)將必要函數搬移到新類。先搬移較低層函數搬移到新類。先搬移較低層函數(也就是“被其他函數調用“ 多於 ”調用其他函數“者),再搬移較高層函數。

       7、每次搬移之後,編譯、測試。

       8、檢查,精簡每個類的介面。如果你建立起雙向串連,檢查是否可以將它改為單向串連。

       9、決定是否公開信類。如果你的確需要公開它,就要決定讓它成為引用對象還是不可變的值對象

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.