亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

重構(gòu)-改善既有代碼的設(shè)計(jì)(十)--簡(jiǎn)化函數(shù)調(diào)用

SQC / 2798人閱讀

摘要:函數(shù)改名問題函數(shù)的名稱未能揭示函數(shù)的用途。這些人甚至?xí)跇?gòu)造函數(shù)中使用設(shè)值函數(shù)。方法將構(gòu)造函數(shù)替換為工廠函數(shù)。以上所說的情況,常會(huì)在返回迭代器或集合的函數(shù)身上發(fā)生。以異常取代錯(cuò)誤碼問題某個(gè)函數(shù)返回一個(gè)特定的代碼,用以表示某種錯(cuò)誤情況。

Rename Method 函數(shù)改名 問題

函數(shù)的名稱未能揭示函數(shù)的用途。

方法

修改函數(shù)名稱。

動(dòng)機(jī)

好的函數(shù)需要有一個(gè)清晰的函數(shù)名。保證一看就懂

Add Parameter 添加參數(shù) 問題

某個(gè)函數(shù)需要從調(diào)用端得到更多信息。

方法

為此函數(shù)添加一個(gè)對(duì)象參數(shù),讓該對(duì)象帶進(jìn)函數(shù)所需信息。

動(dòng)機(jī)

如果發(fā)現(xiàn)缺少參數(shù),當(dāng)然就需要添加參數(shù)。但是在添加之前,先思考是否一定要添加?;蛘邔?shí)用參數(shù)對(duì)象

Remove Parameter 移除參數(shù) 問題

函數(shù)本體不再需要某個(gè)參數(shù)。

方法

將該參數(shù)去除。

動(dòng)機(jī)

別人在調(diào)用的時(shí)候,面對(duì)這個(gè)無用的參數(shù)可能無所適從

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

某個(gè)函數(shù)既返回對(duì)象狀態(tài)值,又修改對(duì)象狀態(tài)。

方法

建立2個(gè)不同的函數(shù),其中一個(gè)負(fù)責(zé)查詢,另一個(gè)負(fù)責(zé)修改。

動(dòng)機(jī)

首先這個(gè)函數(shù)做了兩件事,就很值得重構(gòu)了。其次 不光要查詢,還要修改。這個(gè)函數(shù)會(huì)成為bug之源。
考慮并發(fā)情況

Parameterize Method 令函數(shù)攜帶參數(shù) 問題

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

方法

建立一個(gè)單一函數(shù),以參數(shù)表達(dá)那些不同的值。

動(dòng)機(jī)

你可能會(huì)發(fā)現(xiàn)這樣的2個(gè)函數(shù):它們做著類似的工作,但因少數(shù)幾個(gè)值致使行為略為不同。這種情況下,你可以將這些各自分離的函數(shù)統(tǒng)一起來,并通過參數(shù)來處理那些變化,用以簡(jiǎn)化問題。這樣的修改可以去除重復(fù)代碼,并提高靈活性,因?yàn)槟憧梢杂眠@個(gè)參數(shù)處理更多的變化情況。

Replace Parameter with Explicit Methods 以明確函數(shù)取代參數(shù) 問題

你有一個(gè)函數(shù),其中完全取決于參數(shù)值而采取不同行為。

方法

針對(duì)該參數(shù)的每個(gè)可能值,建立一個(gè)獨(dú)立函數(shù)。

動(dòng)機(jī)

(以明確函數(shù)取代參數(shù))恰恰相反于 (令函數(shù)攜帶參數(shù))。如果某個(gè)參數(shù)有多種可能的值,而函數(shù)內(nèi)又以條件表達(dá)式檢查這些參數(shù)值,并根據(jù)不同參數(shù)值做出不同的行為,那么就應(yīng)該使用本項(xiàng)重構(gòu)。

Preserve whole object 保持對(duì)象完整 問題

你從某個(gè)對(duì)象中取出若干值,將它們作為某一次函數(shù)調(diào)用時(shí)的參數(shù)。

方法

改為傳遞整個(gè)對(duì)象。

動(dòng)機(jī)

有時(shí)候,你會(huì)將來自同一對(duì)象的若干項(xiàng)數(shù)據(jù)作為參數(shù),傳遞給某個(gè)函數(shù)。這樣做的問題在于:萬一將來被調(diào)用函數(shù)需要新的數(shù)據(jù)項(xiàng),你就必須查找并修改對(duì)此函數(shù)的所有調(diào)用。如果你把這些數(shù)據(jù)所屬的整個(gè)對(duì)象傳給函數(shù),可以避免這種尷尬的處境,因?yàn)楸徽{(diào)用函數(shù)可以向那個(gè)參數(shù)對(duì)象請(qǐng)求任何它想要的信息。不過事情總有2面:如果你傳的是數(shù)值,被調(diào)用函數(shù)就只依賴于這些數(shù)值,而不依賴它們所屬的對(duì)象。

Replace Parameter with Methods 以函數(shù)取代參數(shù) 問題

對(duì)象調(diào)用某個(gè)函數(shù),并將所得結(jié)果作為參數(shù),傳遞給另一個(gè)函數(shù)。而接受該參數(shù)的函數(shù)本身也能夠調(diào)用前一個(gè)函數(shù)。

方法

讓參數(shù)接受者去除該項(xiàng)參數(shù),并直接調(diào)用前一個(gè)函數(shù)。

動(dòng)機(jī)

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

Introduce Parameter Object 引入?yún)?shù)對(duì)象 問題

某些參數(shù)總是很自然地同時(shí)出現(xiàn)。

方法

以一個(gè)對(duì)象取代這些參數(shù)。

動(dòng)機(jī)

本項(xiàng)重構(gòu)還可以帶給你更多好處。當(dāng)你把這些參數(shù)組織到一起后,往往很快可以發(fā)現(xiàn)一些可被移至新建類的行為。通常,原本使用那些參數(shù)的函數(shù)對(duì)這一組參數(shù)會(huì)有一些共通的處理,如果將這些共通行為移到新對(duì)象中,你可以減少很多重復(fù)代碼。

Remove setting Method 移除設(shè)置函數(shù) 問題

類中的某個(gè)字段應(yīng)該在對(duì)象創(chuàng)建時(shí)被設(shè)值,然后就不再改變。

方法

去掉該字段的所有設(shè)值函數(shù)。

動(dòng)機(jī)

如果你為某個(gè)字段提供了設(shè)值函數(shù),這就暗示這個(gè)字段值可以被改變。如果你不希望在對(duì)象創(chuàng)建之后此字段還有機(jī)會(huì)被改變,那就不要為它提供設(shè)值函數(shù)。這樣你的意圖會(huì)更加清晰,并且可以排除其值被修改的可能性。
如果你保留了間接訪問變量的方法,就可能經(jīng)常有程序員盲目使用它們。這些人甚至?xí)跇?gòu)造函數(shù)中使用設(shè)值函數(shù)。

Hide Method 隱藏函數(shù) 問題

有一個(gè)函數(shù),從來沒有被其他任何類用到。

方法

將這個(gè)函數(shù)修改為private。

動(dòng)機(jī)

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

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

你希望在創(chuàng)建對(duì)象時(shí)不僅僅是做簡(jiǎn)單的建構(gòu)動(dòng)作。

方法

將構(gòu)造函數(shù)替換為工廠函數(shù)。

動(dòng)機(jī)

就是在派生子類的過程中以工廠函數(shù)取代類型碼。你可能常常需要根據(jù)類型碼創(chuàng)建相應(yīng)的對(duì)象,現(xiàn)在,創(chuàng)建名單中還得加上子類,那些子類也是根據(jù)類型碼來創(chuàng)建。然而由于構(gòu)造函數(shù)只能返回單一類型的對(duì)象,因此你需要將構(gòu)造函數(shù)替換為工廠函數(shù)。

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

Encapsulate Downcast 封裝向下轉(zhuǎn)型 問題

某個(gè)函數(shù)返回的對(duì)象,需要由函數(shù)調(diào)用者執(zhí)行向下轉(zhuǎn)型(downcast)。

方法

將向下轉(zhuǎn)型動(dòng)作移到函數(shù)中。

動(dòng)機(jī)

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

Replace Error Code with Exception 以異常取代錯(cuò)誤碼 問題

某個(gè)函數(shù)返回一個(gè)特定的代碼,用以表示某種錯(cuò)誤情況。

方法

改用異常。

動(dòng)機(jī)

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

Replace Exception with Test 以測(cè)試取代異常 問題

面對(duì)一個(gè)調(diào)用者可以預(yù)先檢查的條件,你拋出一個(gè)異常。

方法

修改調(diào)用者,使它在調(diào)用函數(shù)之前先做檢查。

動(dòng)機(jī)

異常的出現(xiàn)是程序語言的一大進(jìn)步。但是,就像許多好東西一樣,異常會(huì)被濫用,從而變得不再讓人愉快。“異?!敝粦?yīng)該被用于異常的、罕見的行為,也就是那些產(chǎn)生意料之外的錯(cuò)誤的行為,而不應(yīng)該成為條件檢查的替代品。如果你可以合理期望調(diào)用者在調(diào)用函數(shù)之前檢查某個(gè)條件,那么就應(yīng)該提供一個(gè)測(cè)試,而調(diào)用者應(yīng)該使用它。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/71129.html

相關(guān)文章

  • 重構(gòu)---改善既有代碼設(shè)計(jì)》之簡(jiǎn)化條件表達(dá)式

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

    Cheng_Gang 評(píng)論0 收藏0
  • 重構(gòu)-改善既有代碼設(shè)計(jì)(九)--簡(jiǎn)化條件表達(dá)式

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

    missonce 評(píng)論0 收藏0
  • Java學(xué)習(xí)路線總結(jié),搬磚工逆襲Java架構(gòu)師(全網(wǎng)最強(qiáng))

    摘要:哪吒社區(qū)技能樹打卡打卡貼函數(shù)式接口簡(jiǎn)介領(lǐng)域優(yōu)質(zhì)創(chuàng)作者哪吒公眾號(hào)作者架構(gòu)師奮斗者掃描主頁左側(cè)二維碼,加入群聊,一起學(xué)習(xí)一起進(jìn)步歡迎點(diǎn)贊收藏留言前情提要無意間聽到領(lǐng)導(dǎo)們的談話,現(xiàn)在公司的現(xiàn)狀是碼農(nóng)太多,但能獨(dú)立帶隊(duì)的人太少,簡(jiǎn)而言之,不缺干 ? 哪吒社區(qū)Java技能樹打卡?【打卡貼 day2...

    Scorpion 評(píng)論0 收藏0
  • 讀書筆記《重構(gòu) 改善既有代碼設(shè)計(jì)

    摘要:重構(gòu)在不改變代碼的外在的行為的前提下對(duì)代碼進(jìn)行修改最大限度的減少錯(cuò)誤的幾率本質(zhì)上,就是代碼寫好之后修改它的設(shè)計(jì)。重構(gòu)可以深入理解代碼并且?guī)椭业?。同時(shí)重構(gòu)可以減少引入的機(jī)率,方便日后擴(kuò)展。平行繼承目的在于消除類之間的重復(fù)代碼。 重構(gòu) (refactoring) 在不改變代碼的外在的行為的前提下 對(duì)代碼進(jìn)行修改最大限度的減少錯(cuò)誤的幾率 本質(zhì)上, 就是代碼寫好之后 修改它的設(shè)計(jì)。 1,書中...

    mdluo 評(píng)論0 收藏0
  • 重構(gòu)---改善既有代碼設(shè)計(jì)

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

    baihe 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<