代碼的壞味道【2】

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

返回總目錄 四、Long Parameter List(過長參數列) 太長的參數列難以理解,太多參數會造成前後不一致、不易使用。 1、一般情況來說,如果參數多於3個,就可以考慮使用對象了。將函數所需要的參數封裝在一個新類中,將這個類當做參數。 2、如果方法的參數數目不定,且參數類型一致,也可以使用p ...



返回總目錄


四、Long Parameter List(過長參數列)

太長的參數列難以理解,太多參數會造成前後不一致、不易使用。

1、一般情況來說,如果參數多於3個,就可以考慮使用對象了。將函數所需要的參數封裝在一個新類中,將這個類當做參數。

2、如果方法的參數數目不定,且參數類型一致,也可以使用params關鍵字,減少重覆參數。

只需要傳給函數足夠的、讓其可以從中獲取自己需要的東西就行了

五、Divergent Change(發散式變化)

通俗地說,就是某個類經常因為不同的原因在不同的方向上發生變化(一個類受多種變化的影響)。

此時我們要做的就是找出某特定原因而造成的所有變化,然後將他們提煉到另一個類中。

針對某一外界變化的所有修改,只應發生在單一類中,而這個類中所有的內容都應反映此變化

六、Shotgun Surgery(霰彈式變化)

這種情況與Divergent Change恰恰相反。遇到某種變化,都必須在許多不同的類內做出許多小修改(一種變化引發多個類相應修改)。

把所有需要修改的代碼放進同一個類中。如果暫時沒有合適的類可以安置這些代碼,就創造一個。

Shotgun Surgery和Divergent Change你都需要適時整理重構代碼,讓“外界變化”和“需要修改的類”趨於一一對應。

七、Feature Envy(依戀情結)

 這種壞味道主要在於:一個函數使用其他類屬性比使用自身類屬性還要多。換句話說,就是某個函數為了計算某個值,從另一個對象那兒調用幾乎半打的取值函數。

 療法也顯而易見,就是把這部分代碼提煉到單獨的函數中,然後將函數再移到它該在的地方。

 當然了,並非所有情況都這麼簡單。一個函數往往會用到幾個類的功能,那麼它究竟魂歸何處?原則就是:判斷哪個類擁有最多被此函數使用的數據,然後就把這個函數和那些數據擺在一起。

將數據和對數據的操作行為包裝在一起

八、Data Clumps(數據泥團)

兩個類中有相同的欄位、許多函數簽名中有相同的參數。

找出這些數據以欄位形式出現的地方,將它們提煉到一個獨立的對象中。要是想縮減參數可以考慮以一個對象取代這些參數。

總是綁在一起的數據應該擁有屬於它們自己的對象

To Be Continued...

 


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

-Advertisement-
Play Games
更多相關文章
  • 今天是第一次接觸C#,由於長時間的做Java開發,突然轉到C#非常的不自然,但是也有了一些收穫,給大家分享一下 ...
  • "sweetalert": "^1.1.3",記住這個參數,Abp中這個組件只能用這個版本,高於它的message會沒有效果,切記 ...
  • 回到目錄 進行dotnetcore之後,各種對象都是基於DI進行生產的,這就有了對象的生命周期一說,早在autofac里也有相關知識點,這與Microsoft.Extensions.DependencyInjection是完全溫和的,方便大家理解,在講今天的組件化之前,先對DI的三種生命周期進行理解 ...
  • 大致要實現的 效果如下 1,添加Controller(用到的X.PagedList 註意到nuget添加) 2,視圖 另外還有_createTaskPartial,_EditTaskPartial 等,這裡就不貼代碼了 以上。。。 參考http://www.jianshu.com/p/620c20f ...
  • 最近在練習EF的過程中,實現將Linq返回的結果綁定到Combox時出錯。 錯誤提示如下: System.NotSupportedException:“Data binding directly to a store query (DbSet, DbQuery, DbSqlQuery, DbRawS... ...
  • 一,一些相關解釋 Service 在應用服務層也就是application層。應用服務用於將領域(業務)邏輯暴露給展現層。展現層通過傳入DTO(數據傳輸對象)參數來調用應用服務,而應用服務通過領域對象來執行相應的業務邏輯並且將DTO返回給展現層。 也就是這樣避免了應用服務層和展現層的,直接數據交互, ...
  • Parallel Programming-實現並行操作的流水線(生產者、消費者) ...
  • 原文鏈接:http://www.mono-project.com/news/2017/11/13/mono-interpreter/ Mono即將通過它的JIT編譯器和靜態編譯器以及一個.net解釋器以帶來一些新的方式來運行你的代碼. 在2001年Mono項目誕生之時,我們為.net指令集實現了一個 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...