重構手法47:Replace Parameter with Explicit Methods (以明確函數取代參數)

來源:互聯網
上載者:User

你有一個函數,其中完全取決於參數值而採取不同香味。針對該參數的每個可能值,建立一個獨立函數。

動機:Replace Parameter with Explicit Methods (以明確函數取代參數)恰恰相反於Parameterize Method (令函數攜帶參數)。如果某個參數有多種可能的值,而函數內又以條件運算式檢查這些參數值,並根據不同參數值做出不同的行為,那麼就應該使用本項重構。調用者原本必須賦予參數適當的值,以決定該函數做出何種響應。現在,既然你提供了不同的函數給調用者使用,就可以避免出現條件運算式。此外你還可以獲得編譯期檢查的好處,而且介面也很清楚。如果以參數值決定函數行為,那麼函數使用者不但需要觀察該函數,而且還要判斷參數值是否合法,而“合法的參數值”往往很少在文檔中被清楚地提出。

       就算不考慮編譯期檢查的好處,只是為了獲得一個清晰地介面,也值得執行本項重構。哪怕只是給一個內部的布爾變數賦值,相較之下,switch。BeOn()也比Switch.SetState()要清楚的多。

       但是,如果參數值不會對函數行為有太多影響,就不應該使用Replace Parameter with Explicit Methods (以明確函數取代參數)。如果情況真是這樣,而你也只需要通過參數為一個欄位賦值,那麼直接使用設值函數好了。如果的確需要條件判斷的行為,可考慮使用Replace Conditional with Polymorphism (以多態取代條件運算式)。

做法:1、針對參數的每一種可能值,建立一個明確函數。

       2、修改條件運算式的每個分支,是其調用合適的新函數。

       3、修改每個分支後,編譯並測試。

       4、修改原函數的每一個被調用點,改而調用上述的某個合適的新函數。

       5、編譯、測試。

       6、所有調用端都修改完畢後,刪除原函數。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.