C# 開發通用規則

3年前 (2018-01-19) Yosheng 程式設計 0評論 已收錄 732℃

好久沒有寫文章了,差點遺忘了部落格的存在,從 Java 開發跳來 C# 也幾個月時間了!想紀錄下寫程式的一些通用規範,實際應用中 Java 和 C# 命名的取向還真有些不同,不過大體離不開 Pascal 和 Camel 兩種命名方式就是囉,詳細如內~

下面直接引用自 [email protected]點部落

以下為C#命名的

一般原則

  • 使用Pascal( 如 : "VirtualDesign" )及Camel( 如 : "virtualDesign" )兩種命名方式,並建議避免使用分隔符號( 例如底線 "_" 或連字號 "-" )來做命名 - CA1702
  • 可讀性優先於簡潔性( CanScrollHorizontally 優於 ScrollableX ),並參考常用的命名( HorizontalAlignment 優於 AlignmentHorizontal )。
  • 避免使用匈牙利命名法( 如 : "strName" ),並正確的使用前置及後置詞命名 - CA1720CA1710
  • 正確的使用縮寫,縮寫字為兩個字母以內,則兩字皆為大寫( 如 : "IO" ),三個字以上,則使用Pascal命名規則( 如 : "Xml" ),且縮寫字不得高於五個字母 - CA1709

物件命名原則

種類 命名規則 範例 注意事項
Project File Pascal Math.Algorithm.csproj
Source File Pascal RuleSetup.cs 保持檔案名稱與Class名稱一致
Resource or Embedded File Pascal TestPicture.jpg
Namespace Pascal MyCompany.Wpf.Controls 儘量使用"公司名稱.專案名稱|技術名稱.功能分類|子類別"做為命名準則
Class or Struct Pascal CustomAttribute 使用名詞命名,並使用基底類別名稱做為後置詞
Interface Pascal ICustomer 使用前置詞"I"
Generic Class & Generic Parameter Type Pascal TKey,TValue 使用前置詞"T"或"K"
Method Pascal ValidateUser 使用動詞作為開頭
Property Pascal Name 避免使用"Get"或"Set"當前置詞
Field (Public, Protected, or Internal) Pascal Name
Field (Private) Camel _name 字首加上底線做為區隔
Constant or Static Field Pascal Name 與Field處理方式相同
Enum Pascal EncodeType 裡面包含選項也是使用Pascal命名法
Delegate or Event Pascal public event EventHandler LoadPlugin 全都使用 PascalCase
Local Variable (inline) Camel string name 避免使用單一字元和列舉的名稱
Parameter Camel public void Execute(string commandText, int iterations)

其他注意事項:

  • 不要在列舉項目中使用"Reserved"做為命名 - CA1700
  • 不要使用型別名稱做為列舉值的前置字元 - CA1712

接下來換紀錄一些常見的設計模式 ( Design Pattern ) 或慣用名稱吧!我個人是很重視可讀性和簡潔性,開發幾個月下來發現每個人風格不同,每當接下其他人寫得的項目的時候就會是....需要一段陣痛期!因此擁有共同的規範和目標可以減少這類問題更專注開發在功能上囉。

偉大的 StackOverFlow 有人提出這類問題
Naming Classes - How to avoid calling everything a “<WhatEver>Manager”?

本篇文章就以上面的回答做紀錄,大部分下述的單字都是作為後綴 (suffixes) 來使用

下列三個是我目前都有使用過也應用在專案上,基本上類裡面都是放置靜態方法,但我目前對於這三個的理解上有些不同。

  1. Util (工具類):我通常作為工具類使用,像是放一些轉型方法或者是檔案處理相關
  2. Helper (輔助者):在現有專案中有看過,裡面寫了 Token 驗證處理相關,比較像是輔助 Token 驗證轉成實際的使用者類
  3. Manager (管理者):我將其設定為參數管理用,好比 Enum 中狀態的對應或者是一些靜態名稱的對應

針對上述三個名詞,如果根據物件導向原則中的單一職責 (Single responsibility principle) 確實會造成一些誤解,但對於我目前開發的專案來說,案子不是太大,使用起來也是挺直觀的就是。

引述自 stackoverflow

It seems Helper, Manager, and Util are the unavoidable nouns you attach for coordinating classes that contain no state and are generally procedural and static. An alternative is Coordinator.

Coordinator (協作者):我目前還無法領悟,也許未來的某一天未來的我會理解吧?

接下來要介紹的也是常見的幾個類型

  1. Handler (處理器) :處理 Message 相關 MessageHandler 用來處理訊息相關封裝、查詢、刪除
  2. Reader (讀取器): 處理 Excel 讀取的 ExcelReader
  3. Writer (寫入器): 處理 Excel 寫入的 ExcelWriter
  4. Provider (提供器):提供成員資訊的 MemeberInfoProvider
  5. Wrapper (包裝器): 這部份我遇到的狀況是用來將要輸出的物件轉成 Json 透過公司內部規範的套件有個 wrap 方法就是

最後文末放上這個網址 http://source-code-wordle.de/ 網羅網路上常見的命名單字

參考資料

编程中的命名设计那点事
C#项目开发规范
C#编码规范

博主

擅長使用 C# 和 Java 開發項目,全棧開發工程師,前端主要使用 Vue 其次 Angular ,目前正在學習分布式架構,運維研發兼具,平時愛好鑽研技術並應用於實務當中,常駐於上海。

相關推薦

相逢就是有緣,留下足跡吧!