讀C#代碼整潔之道筆記02_類、對象和數據結構及編寫整潔函數

来源:https://www.cnblogs.com/lying7/archive/2023/03/21/17232201.html
-Advertisement-
Play Games

1. 組織類 1.1. 每一個介面、類、結構體和枚舉均應當擁有其自身的獨立源文件 1.2. Pascal命名方法命名命名空間 1.3. 測試類定義在獨立的程式集 1.3.1. 不同程式集的測試放在不同程式集 1.3.2. 程式集名稱的最後附加Tests命名空間 1.4. 公司名稱、產品名稱和縮寫辭彙 ...


1. 組織類

1.1. 每一個介面、類、結構體和枚舉均應當擁有其自身的獨立源文件

1.2. Pascal命名方法命名命名空間

1.3. 測試類定義在獨立的程式集

  • 1.3.1. 不同程式集的測試放在不同程式集

  • 1.3.2. 程式集名稱的最後附加Tests命名空間

1.4. 公司名稱、產品名稱和縮寫辭彙無須使用複數形式

2. 單一職責原則

2.1. (Single Respon-sibility Principle,SRP)

2.2. 一個類應當只具備一種職責

2.3. 類的職責就是類所具備的功能

3. 從註釋生成文檔

3.1. 源代碼文件的頂部都應當包含版權聲明

3.2. 命名空間、介面、類、枚舉、結構體、方法和屬性都應當包含註釋

4. 內聚

4.1. 高內聚

  • 4.1.1. 代碼應恰當分組

4.2. 低內聚

  • 4.2.1. 不屬於同一類型的代碼劃歸在一組

  • 4.2.2. 職責多於一種的類稱為低內聚類

5. 耦合

5.1. 緊耦合

  • 5.1.1. 一個類對另一個類依賴性越強

5.2. 低耦合

  • 5.2.1. 相互獨立的類越多

  • 5.2.2. 依賴註入技術有助於編寫低耦合且易於測試的整潔代碼

6. 為變化而設計

6.1. 設計變化的內容和方式

6.2. 面向介面編程

  • 6.2.1. Interface-Oriented Programming,IOP

  • 6.2.2. 有助於編寫多態的代碼

  • 6.2.3. 控制反轉可以在必要時替換實現了相同介面的軟體的實現

6.3. 依賴註入(Dependency Injection,DI)

6.4. 控制反轉(Inversion of Control,IoC)

6.5. 解決軟體變更的問題

7. 迪米特法則

7.1. Law of Demeter

7.2. 最少知識原則(The Least Knowledge Principle)

7.3. 一個類對於其他類知道的越少越好

7.4. 意在刪除鏈條式調用(用“.”進行的調用鏈接)

7.5. 可以解除代碼的耦合

7.6. 實現迪米特法則有時是很難的

8. 不可變對象

8.1. 值類型

8.2. 一旦獲得則其值就不再改變

8.3. 容易預測又不會改變

8.4. “最小驚訝原則”(principle of least astonishment,POLA)

9. 對象應當隱藏數據並暴露方法

10. 數據結構體應當暴露數據而無須包含方法

10.1. 結構體和類不同,它們使用值相等而非引用相等來進行比較

10.2. 最好隱藏數據,僅僅通過屬性或方法來訪問數據

11. 函數式編程

11.1. 一種軟體編程方法

11.2. 將計算看作數學計算評估

11.3. LINQ

11.4. readonly struct和不可變數據結構

11.5. 比其他編程類型的方法要短小得多

11.6. 對於面向過程的程式員和麵向對象的程式員來說需要比較艱難的轉變才能適應

12. 保持方法短小

12.1. 最好將方法長度控制在10行之內

12.2. 最佳長度是在4行之內

13. 代碼縮進

13.1. IDE實現

14. 避免重覆代碼

14.1. Don't Repeat Yourself,DRY

14.2. WET即每次都需要編寫的代碼(Write Every Time)

15. 儘可能減少參數數量

15.1. 方法參數數目應當小於三個

15.2. 理想情況下則不需要任何參數

15.3. 使用參數對象的模式進行設計

16. 更改對象狀態是程式缺陷的源泉,尤其是在多線程程式中


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

-Advertisement-
Play Games
更多相關文章
  • 由於 Blazor-WebAssembly 是在瀏覽器中運行的,通常不需要執行伺服器代碼,只要有個“窩”能托管並提供相關文件的下載即可。所以,當你有一個現成的 Blazor wasm 項目,沒必要用其他語言重寫,或者你不想用 ASP.NET Core 來托管(有些大材小用了),就可以試試用 node ...
  • 1. Grid佈局 ,(Table 佈局) 兩行兩列佈局, Border 0 行 0 列預設開始 <Window x:Class="WpfApp.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" ...
  • 1 枚舉 enum E_MonsterType//定義了一個枚舉的變數類型 { normal1,//0 boss = 5,//5 normal2,//6,前一個自動加1 } //枚舉和switch語句天生一對,寫switch時能對枚舉類型自動補全 E_MonsterType monsterType ...
  • 用了很多年的Rapid SCADA v5,現在官網已經推出了v6,就簡單寫一下有關v6的安裝指南吧。 本指南面向Windows用戶,不適用於linux用戶 步驟 從官網下載Rapid SCADA最新的RC版本的v6,然後運行壓縮包內的ScadaSetup.exe程式。 FAQ 提示埠占用 Rapi ...
  • 簡介 本文主要介紹使用 利用 SqlSugar 來實現多資料庫的維護 ,動態建類CRUD,動態建表 ,全局過濾器 ,跨庫查詢等功能 1、創建表 SqlSugar支持了3種模式的建表(無實體建表、實體建表,實體特性建表),非常的靈活 可以多個資料庫 MYSQL MSSQL ORACLE SQLITE ...
  • 十年河東,十年河西,莫欺少年窮 學無止境,精益求精 netcore3.1控制台應用程式,引入MQTTnet 2.8版本 訂閱端: using RabbitMQ.Client; using RabbitMQ.Client.Events; using System; using System.Text; ...
  • "C#用兩個線程交替列印1-100的五種方法"是.NET工程師面試多線程常考的試題之一,主要考察對C#語法和對多線程的熟悉程度。本文將用5種方法實現這個面試題。 方法1:使用Mutex或lock 這種方法涉及使用Mutex或lock對象來同步兩個線程。其中一個線程負責列印偶數,另一個線程負責列印奇數 ...
  • 1.使用 Thread 類 Thread 類是 .NET 中最基本的多線程操作方式之一,可以使用它創建並啟動新線程。以下是一個簡單的例子,創建一個新的線程並運行: using System; using System.Threading; class Program { static void Ma ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...