重構手法之簡化函數調用【1】

来源:http://www.cnblogs.com/liuyoung/archive/2017/11/30/7899768.html
-Advertisement-
Play Games

返回總目錄 本小節目錄 Rename Method(函數改名) Add Parameter(添加參數) Remove Parameter(移除參數) 1Rename Method(函數改名) 概要 函數的名稱未能揭示函數的用途。 修改函數的名稱。 動機 將複雜的處理過程分解成小函數是良好的編程風格。 ...


返回總目錄

本小節目錄

1Rename Method(函數改名)

概要

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

修改函數的名稱。

動機

將複雜的處理過程分解成小函數是良好的編程風格。但是,如果做的不好,會使你費盡周折卻弄不清楚這些小函數各自的用途。要避免這些麻煩,關鍵在於給函數起一個好名稱。函數的名稱應該準確表達它的用途。給函數命名有一個好辦法:首先考慮給這個函數寫上一句怎樣的註釋,然後想辦法將註釋變成函數名稱。

如果你看到一個函數名稱不能很好的表達它的用途,應該馬上加以修改。

範例

如下代碼所示,假如一個公司建立一個員工的類,類中有一個員工名字的欄位和一個按照小時計算員工收入的方法,那麼下麵代碼的取名就顯得很難理解了,所以我們會重構名稱。

public class Person
{
    public string FN { get; set; }

    public decimal ClcHrlyPR()
    {
        // code to calculate hourly payrate
        return 0m;
    }
}

重構後代碼如下所示,這樣看起來就非常清晰,如果有新進項目組的成員,也會變得很樂意看這個代碼。

public class Employee
{
    public string FirstName { get; set; }

    public decimal CalculateHourlyPay()
    {
        // code to calculate hourly payrate
        return 0m;
    }
}

 小結

此重構經常被廣大程式員所忽視,但是帶來的隱患是不可估量的,也許老闆要修改功能,那我們來看這段沒有重構的代碼(就算是自己寫的,但由於時間和項目多等關係,我們也很難理解了),然後就會變得焦頭爛額。相反重構後的代碼就會覺得一目瞭然、賞心悅目。

當然了,本文中的改名不僅僅是函數,還包括類、方法參數、變數、委托、事件等等元素。

2Add Parameter(添加參數) 

概要

某個函數需要從調用端得到更多的信息,那麼為此函數添加一個參數,讓該參數帶進函數所需信息。

動機

這個重構手法很常用,我相信你肯定用過它。

你必須修改一個函數,而修改後的函數需要一些過去沒有的信息,因此需要給該函數添加一個參數。

那麼,什麼時候不使用本項重構?

除了Add Parameter外,只要有可能,其他選擇都比“Add Parameter”要好,因為有可能其他選擇不會增加參數列的長度。過長的參數列是不好的味道,因為程式員很難記住那麼多參數,而且往往伴隨著壞味道Data Clumps。

3Remove Parameter(移除參數)

概要

函數本體不再需要某個參數,將該參數去除

動機

程式員可能經常添加參數,卻往往不願意去掉它們。他們想:無論如何,多餘的參數不會引起任何問題,而且以後還可能用上它。

這種想法很糟糕!參數代表著函數所需的信息,不同參數代表不同意義。函數調用者必須為每一個參數操心該傳什麼東西進去。如果不去掉多餘參數,就是讓你的每一位用戶多費一份心。

 

To Be Continued……


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • oracle基本簡單的用法,之前的筆記稍作整理一下,希望對各位有用,如有問題可在下方留言,所有SQL都是經過oracle環境測試的,可複製可粘貼。 今天先寫這些,未完,待續。。。。 ...
  • 下載官方的軟體包,參考地址:http://download.oracle.com/otn-pub/java/jdk/8u151-b12/e758a0de34e24606bca991d704f6dcbf/jdk-8u151-linux-x64.tar.gz?AuthParam=1511877655_2 ...
  • 企業級分散式存儲應用與實戰-mogilefs 環境:公司已經有了大量沉澱用戶,為了讓這些沉澱用戶長期使用公司平臺,公司決定增加用戶粘性,逐步發展基於社交屬性的多樣化業務模式,決定開展用戶討論區、賣家秀、買家秀、用戶試穿短視頻等業務,因此,公司新的業務的業務特征將需要海量數據存儲,你的領導要求基於開源 ...
  • Linux簡介及Ubuntu安裝 Linux,免費開源,多用戶多任務系統。基於Linux有多個版本的衍生。RedHat、Ubuntu、Debian 安裝VMware或VirtualBox虛擬機。具體安裝步驟,找百度。 再安裝Ubuntu。具體安裝步驟,找百度。 安裝完後,可以看到Linux系統的目錄 ...
  • 系統環境: CentOS 6.5 / 7.0 x86_64 Fedora 20 x86_64下載 PHP 源碼包 # wget http://cn2.php.net/distributions/php-5.5.15.tar.bz2# tar xf php-5.5.15.tar.bz2 -C /usr ...
  • Linux系統LVM分區減容擴容 目標:將VolGroup-lv_home縮小到20G,並將剩餘的空間添加給VolGroup-lv_root 1.首先查看磁碟使用情況 [root@localhost ~]# df -h 文件系統 容量 已用 可用 已用% 掛載點 Filesystem Size Us ...
  • ...
  • 首先請確認已購買了阿裡雲主機產品或萬網雲虛擬伺服器,購買產品後才能正常通過阿裡雲提交備案申請,另不同的產品類型,驗證方式也不同: 一、ECS、SLB、ACE和彈性web托管、建站市場(雲市場),產品類型請選擇“阿裡雲”。備案服務號請登錄用戶中心-備案管理中查詢;如何申請備案服務號? 二、雲虛擬主機產 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...