国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

重構-改善既有代碼的設計(十)--簡化函數調用

SQC / 2728人閱讀

摘要:函數改名問題函數的名稱未能揭示函數的用途。這些人甚至會在構造函數中使用設值函數。方法將構造函數替換為工廠函數。以上所說的情況,常會在返回迭代器或集合的函數身上發生。以異常取代錯誤碼問題某個函數返回一個特定的代碼,用以表示某種錯誤情況。

Rename Method 函數改名 問題

函數的名稱未能揭示函數的用途。

方法

修改函數名稱。

動機

好的函數需要有一個清晰的函數名。保證一看就懂

Add Parameter 添加參數 問題

某個函數需要從調用端得到更多信息。

方法

為此函數添加一個對象參數,讓該對象帶進函數所需信息。

動機

如果發現缺少參數,當然就需要添加參數。但是在添加之前,先思考是否一定要添加。或者實用參數對象

Remove Parameter 移除參數 問題

函數本體不再需要某個參數。

方法

將該參數去除。

動機

別人在調用的時候,面對這個無用的參數可能無所適從

Separate Query from Modifier 將查詢函數和修改函數分離 問題

某個函數既返回對象狀態值,又修改對象狀態。

方法

建立2個不同的函數,其中一個負責查詢,另一個負責修改。

動機

首先這個函數做了兩件事,就很值得重構了。其次 不光要查詢,還要修改。這個函數會成為bug之源。
考慮并發情況

Parameterize Method 令函數攜帶參數 問題

若干函數做了類似的工作,但在函數本體中卻包含了不同的值。

方法

建立一個單一函數,以參數表達那些不同的值。

動機

你可能會發現這樣的2個函數:它們做著類似的工作,但因少數幾個值致使行為略為不同。這種情況下,你可以將這些各自分離的函數統一起來,并通過參數來處理那些變化,用以簡化問題。這樣的修改可以去除重復代碼,并提高靈活性,因為你可以用這個參數處理更多的變化情況。

Replace Parameter with Explicit Methods 以明確函數取代參數 問題

你有一個函數,其中完全取決于參數值而采取不同行為。

方法

針對該參數的每個可能值,建立一個獨立函數。

動機

(以明確函數取代參數)恰恰相反于 (令函數攜帶參數)。如果某個參數有多種可能的值,而函數內又以條件表達式檢查這些參數值,并根據不同參數值做出不同的行為,那么就應該使用本項重構。

Preserve whole object 保持對象完整 問題

你從某個對象中取出若干值,將它們作為某一次函數調用時的參數。

方法

改為傳遞整個對象。

動機

有時候,你會將來自同一對象的若干項數據作為參數,傳遞給某個函數。這樣做的問題在于:萬一將來被調用函數需要新的數據項,你就必須查找并修改對此函數的所有調用。如果你把這些數據所屬的整個對象傳給函數,可以避免這種尷尬的處境,因為被調用函數可以向那個參數對象請求任何它想要的信息。不過事情總有2面:如果你傳的是數值,被調用函數就只依賴于這些數值,而不依賴它們所屬的對象。

Replace Parameter with Methods 以函數取代參數 問題

對象調用某個函數,并將所得結果作為參數,傳遞給另一個函數。而接受該參數的函數本身也能夠調用前一個函數。

方法

讓參數接受者去除該項參數,并直接調用前一個函數。

動機

如果函數可以通過其他途徑獲得參數值,那么它就不應該通過參數取得該值。過長的參數列會增加程序閱讀者的理解難度,因此應該盡可能縮短參數列的長度。

Introduce Parameter Object 引入參數對象 問題

某些參數總是很自然地同時出現。

方法

以一個對象取代這些參數。

動機

本項重構還可以帶給你更多好處。當你把這些參數組織到一起后,往往很快可以發現一些可被移至新建類的行為。通常,原本使用那些參數的函數對這一組參數會有一些共通的處理,如果將這些共通行為移到新對象中,你可以減少很多重復代碼。

Remove setting Method 移除設置函數 問題

類中的某個字段應該在對象創建時被設值,然后就不再改變。

方法

去掉該字段的所有設值函數。

動機

如果你為某個字段提供了設值函數,這就暗示這個字段值可以被改變。如果你不希望在對象創建之后此字段還有機會被改變,那就不要為它提供設值函數。這樣你的意圖會更加清晰,并且可以排除其值被修改的可能性。
如果你保留了間接訪問變量的方法,就可能經常有程序員盲目使用它們。這些人甚至會在構造函數中使用設值函數。

Hide Method 隱藏函數 問題

有一個函數,從來沒有被其他任何類用到。

方法

將這個函數修改為private。

動機

重構往往促使你修改函數的可見度。提高函數可見度的情況很容易想象:另一個類需要用到某個函數,因此你必須提高該函數的可見度。但是要指出一個函數的可見度是否過高,就稍微困難一些。理想狀態下,你可以使用工具檢查所有函數,指出可被隱藏起來的函數。即使沒有這樣的工具,你也應該時常進行這樣的檢查。

   一種特別常見的情況是:當你面對一個過于豐富、提供了過多行為的接口時,就值得將非必要的取值函數和設值函數隱藏起來。尤其當你面對的是一個簡單封裝的數據容器時,情況更是如此。隨著越來越多行為被放入這個類,你會發現許多設值/取值函數不再需要被公開,因此可以將它們隱藏起來。如果你把取值/設值函數設為private,然后在所有地方都直接訪問變量,那就可以放心移除取值/設值函數了。
Replace Constructor with Factory Method 以工廠函數取代構造函數 問題

你希望在創建對象時不僅僅是做簡單的建構動作。

方法

將構造函數替換為工廠函數。

動機

就是在派生子類的過程中以工廠函數取代類型碼。你可能常常需要根據類型碼創建相應的對象,現在,創建名單中還得加上子類,那些子類也是根據類型碼來創建。然而由于構造函數只能返回單一類型的對象,因此你需要將構造函數替換為工廠函數。

   此外,如果構造函數的功能不能滿足你的需要,也可以使用工廠函數代替它。工廠函數也是Change Value to Reference (將值對象改為引用對象)的基礎。你也可以令你的工廠函數根據參數的個數和類型,選擇不同的構建行為。

Encapsulate Downcast 封裝向下轉型 問題

某個函數返回的對象,需要由函數調用者執行向下轉型(downcast)。

方法

將向下轉型動作移到函數中。

動機

向下轉型也許是無法避免的,但你仍然應該盡可能少做。如果你的某個函數返回一個值,并且你知道所返回的對象類型比函數簽名所昭告的更特化,你便是在函數用戶身上強加了非必要的工作。這種情況下你不應該要求用戶承擔向下轉型的責任,應該盡量為他們提供準確的類型。
以上所說的情況,常會在返回迭代器或集合的函數身上發生。此時你就應該觀察人們拿這個迭代器干什么用,然后針對性地提供專用函數。

Replace Error Code with Exception 以異常取代錯誤碼 問題

某個函數返回一個特定的代碼,用以表示某種錯誤情況。

方法

改用異常。

動機

可以使用更好的錯誤處理方式:異常。它清楚地將“普通程序”和“錯誤處理”分開了,這使得程序更容易理解:代碼的可理解性應該是我們追求的目標。

Replace Exception with Test 以測試取代異常 問題

面對一個調用者可以預先檢查的條件,你拋出一個異常。

方法

修改調用者,使它在調用函數之前先做檢查。

動機

異常的出現是程序語言的一大進步。但是,就像許多好東西一樣,異常會被濫用,從而變得不再讓人愉快。“異常”只應該被用于異常的、罕見的行為,也就是那些產生意料之外的錯誤的行為,而不應該成為條件檢查的替代品。如果你可以合理期望調用者在調用函數之前檢查某個條件,那么就應該提供一個測試,而調用者應該使用它。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71129.html

相關文章

  • 重構---改善既有代碼設計》之簡化條件表達式

    那有什么天生如此,只是我們天天堅持。 本篇文章主要講解 《重構---改善既有代碼的設計》 這本書中的 第九章簡化條件表達式中 的知識點, Decompose Conditional(分解條件表達式) 問題:你有一個復雜的條件(if、then、else) 語句 解決:從if、then、else三個段落中分別提煉出獨立函數 //重構前 if (date.before(SUMMER_START) |...

    Cheng_Gang 評論0 收藏0
  • 重構-改善既有代碼設計(九)--簡化條件表達式

    摘要:但條件邏輯也是不能忽視的分解條件表達式問題有一個復雜的條件語句。沒什么說的動機重構代碼就是錯移除控制標志問題在一系列布爾表達式中,某個變量帶有控制標記的作用方法以語句或語句取代控制標記動機控制標記大大降低了代碼可讀性。 前言 前面已經對類,方法,字段都進行了重構。貌似看起來很完整了。但條件邏輯也是不能忽視的 分解條件表達式 問題 有一個復雜的條件(if-then-else)語句。(判斷...

    missonce 評論0 收藏0
  • Java學習路線總結,搬磚工逆襲Java架構師(全網最強)

    摘要:哪吒社區技能樹打卡打卡貼函數式接口簡介領域優質創作者哪吒公眾號作者架構師奮斗者掃描主頁左側二維碼,加入群聊,一起學習一起進步歡迎點贊收藏留言前情提要無意間聽到領導們的談話,現在公司的現狀是碼農太多,但能獨立帶隊的人太少,簡而言之,不缺干 ? 哪吒社區Java技能樹打卡?【打卡貼 day2...

    Scorpion 評論0 收藏0
  • 讀書筆記《重構 改善既有代碼設計

    摘要:重構在不改變代碼的外在的行為的前提下對代碼進行修改最大限度的減少錯誤的幾率本質上,就是代碼寫好之后修改它的設計。重構可以深入理解代碼并且幫助找到。同時重構可以減少引入的機率,方便日后擴展。平行繼承目的在于消除類之間的重復代碼。 重構 (refactoring) 在不改變代碼的外在的行為的前提下 對代碼進行修改最大限度的減少錯誤的幾率 本質上, 就是代碼寫好之后 修改它的設計。 1,書中...

    mdluo 評論0 收藏0
  • 重構---改善既有代碼設計

    摘要:為何重構重構有四大好處重構改進軟件設計如果沒有重構,程序的設計會逐漸腐敗變質。經常性的重構可以幫助維持自己該有的形態。你有一個大型函數,其中對局部變量的使用使你無法采用。將這個函數放進一個單獨對象中,如此一來局部變量就成了對象內的字段。 哪有什么天生如此,只是我們天天堅持。 -Zhiyuan 國慶抽出時間來閱讀這本從師傅那里借來的書,聽說還是程序員的必讀書籍。 關于書的高清下載連...

    baihe 評論0 收藏0

發表評論

0條評論

SQC

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<