讀C#代碼整潔之道筆記01_C#的編碼標準和原則

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

1. 編碼原則 1.1. SOLID原則 1.1.1. 單一職責原則(Single Respon-sibility Principle) 1.1.1.1. 類和方法應當僅具備單一職責。所有組合為單一職責的元素應當組合在一起併進行封裝。 1.1.2. 開閉原則(Open-Closed Principl ...


1. 編碼原則

1.1. SOLID原則

  • 1.1.1. 單一職責原則(Single Respon-sibility Principle)

  • 1.1.1.1. 類和方法應當僅具備單一職責。所有組合為單一職責的元素應當組合在一起併進行封裝。

  • 1.1.2. 開閉原則(Open-Closed Principle)

  • 1.1.2.1. 類和方法應當對擴展開放,對修改封閉。

  • 1.1.3. 里氏替換原則(Liskov Substitution)

  • 1.1.3.1. 若函數接收一個基類的指針,那麼該指針應當可以替換為任何從基類派生的類(的指針)而無須事先知曉具體類信息。

  • 1.1.4. 介面隔離原則(Interface Segregation Principle)

  • 1.1.4.1. 與其設計一個大而全的介面不如拆分為若幹小型介面,而類可以選擇實現需要的介面中的方法。

  • 1.1.5. 依賴倒置原則(Dependency Inversion Principle)

  • 1.1.5.1. 高層次的模塊不應當依賴低層次的模塊。

  • 1.1.5.2. 低層次的模塊的替換不應當影響高層次模塊的使用。

  • 1.1.5.3. 不論是高層次的模塊還是低層次的模塊都應當依賴於抽象。

  • 1.1.5.4. 抽象不應當依賴於細節,但是細節應當依賴於抽象。

1.2. YAGNI原則

  • 1.2.1. “你不會需要它”(You Ain't Gonna Need It)

  • 1.2.2. 確保類、方法和整體代碼行數保持絕對最小水平。

1.3. KISS原則

  • 1.3.1. “保持軟體簡單易懂”(Keep It Simple,Stupid)

  • 1.3.2. 務必要保持代碼整潔易讀,確保即使是新手程式員也能夠理解其含義。

1.4. DRY原則

  • 1.4.1. “避免重覆的代碼”(Don't Repeat Yourself)

  • 1.4.2. 當遇到重覆代碼時應當儘早將其移除

1.5. 奧卡姆剃刀法則

  • 1.5.1. Occam's Razor, Ockham's Razor

  • 1.5.2. “如無必要,勿增實體”,即“簡單有效原理”。

  • 1.5.2.1. 最簡單的方案也最可能是正確的那個方案

  • 1.5.2.2. 假設越多,設計方案包含缺陷的可能性就越大

  • 1.5.2.3. 項目的構成組件越少,出問題的可能性就越少

2. 編碼方法

2.1. 測試驅動開發(Test-Driven Development,TDD)

2.2. 行為驅動開發(Behavioral-Driven Development,BDD)

  • 2.2.1. SpecFlow

2.3. 面向方面編程(Aspect-Oriented Programming,AOP)

  • 2.3.1. PostSharp

3. 良好代碼

3.1. 合理的縮進

  • 3.1.1. 工具實現

3.2. 有意義的註釋

3.3. API文檔註釋

  • 3.3.1. 文檔越易用,開發人員使用API的意願就越強

3.4. 使用命名空間合理組織代碼

  • 3.4.1. 使用命名空間合理組織代碼

3.5. 合理的命名規則

  • 3.5.1. Pascal命名法

  • 3.5.1.1. 命名空間、類、介面、枚舉和方法

  • 3.5.2. 駝峰命名法

  • 3.5.2.1. 變數名稱、參數名稱

  • 3.5.3. 在成員變數上必須加上首碼下劃線

3.6. 一個類執行一種任務

3.7. 一個方法做一件事情

3.8. 方法的代碼少於10行,最好不超過4行

  • 3.8.1. 代碼格式化、鏈式函數算1行?

3.9. 方法的參數不多於兩個

  • 3.9.1. 方法最好沒有參數

  • 3.9.2. 有兩個以上的參數時就需要考慮類和方法的職責是不是太多了

  • 3.9.3. 方法的確需要兩個以上的參數,那麼最好將其合併為一個對象參數

3.10. 合理使用異常

3.11. 代碼可讀性強

3.12. 代碼耦合程度低

3.13. 高內聚的代碼

  • 3.13.1. 將公共的功能正確地分組的代碼具有高度的內聚性

3.14. 對象會被恰當銷毀

  • 3.14.1. 請務必調用Dispose()方法明確地銷毀使用中的資源

  • 3.14.2. 將對象(引用)設置為null以使其超出作用範圍

  • 3.14.3. using語句

3.15. 避免使用Finalize()方法

  • 3.15.1. 最好在更加可靠的Dispose()方法中來銷毀非托管資源

3.16. 合理地進行抽象

  • 3.16.1. 當設計只向更高的級別開放,並僅開放必需的內容時,它就處在正確的抽象層次上

3.17. 在大型類中使用#region進行區域劃分


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

-Advertisement-
Play Games
更多相關文章
  • 教程簡介 IT寶庫MS項目入門教程 - 從基本概念開始,簡單易學地學習MS項目,包括設置,簡介,入門,創建新計劃,設置資源,為任務分配資源,計劃持續時間成本和時間,跟蹤進度,高級計劃,項目狀態報告。 Microsoft Project 是一個國際上享有盛譽的通用的項目管理工具軟體,凝集了許多成熟的項 ...
  • 本文已收錄至Github,推薦閱讀 👉 Java隨想錄 微信公眾號:Java隨想錄 摘要 空指針異常(NullPointerException)可以說是Java程式員最容易遇到的問題了,影響說大不大,說小也不小。為瞭解決這個問題,Java 8 版本中推出了 Optional 類。Optional ...
  • _pycache__文件夾可以看作該文件夾下文件已被python接管或者說編譯過。 在第一次執行代碼的時候,Python解釋器已經把編譯的位元組碼放在__pycache__文件夾中,這樣以後再次運行的話,如果被調用的模塊未發生改變,那就直接跳過編譯這一步,直接去__pycache__文件夾中去運行相關 ...
  • 目前由於功能比較簡單,沒有進行前後端拆分,主要技術點:SpringBoot、WebSocket、webjars、Vue、Element-UI、axios、jszip,核心壓縮庫是 Thumbnailator 提供壓縮支持。源代碼已經在 碼雲 star 公開。歡迎各位大佬批評。 ...
  • 解讀 Servlet 源碼:GenericServlet,ServletConfig,ServletContext 每博一文案 人活著,就得隨時準備經受磨難。他已經看過一些書,知道不論是普通人還是了不起的人,都要在自己的一生中經歷許多磨難。磨難使人堅強。 人和社會、一切鬥爭的總結局也許都是中庸而已。 ...
  • 在剛接觸後臺線程的時候,覺得線程神秘且高深,並且時常有先輩們千叮萬囑:能不用的時候,儘量不要用,千萬不要濫用線程,否則會發生預料不到的結果。在接觸線程一段時間後,感覺線程也不過如此,輕而易舉的就可以創建,所以逐漸大膽起來,項目里隨處可見的都是Task,Thread,async,await等內容。在大... ...
  • 一周一周來算,註,如果本月1號是星期日,則這一月共有六周,即六行,所以乾脆每月都輸出6周就行了,然後再算第一周里的本月一號是周幾,第一周里本月又占了幾天。。。呃。。。反正很亂,想了一上午,現在寫出來了倒不知道如何解釋了。。算了。。直接上代碼。。 //日曆界面 public IActionResult ...
  • 調用Win32 API(優先順序最高,全局監聽, 支持最小化失焦等情況) 那麼,假如我要在一個WPF程式監聽CTRL+5按鍵,首先在主視窗程式添加以下代碼: /// <summary> /// CTRL+5事件Id /// </summary> private const int Ctrl5KeyEv ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...