共计 2533 个字符,预计需要花费 7 分钟才能阅读完成。
好久沒有寫文章了,差點遺忘了部落格的存在,從 Java 開發跳來 C# 也幾個月時間了!想紀錄下寫程式的一些通用規範,實際應用中 Java 和 C# 命名的取向還真有些不同,不過大體離不開 Pascal 和 Camel 兩種命名方式就是囉,詳細如內~
下面直接引用自 Ouch@點部落
以下為 C# 命名的
一般原則:
- 使用 Pascal(如 : “VirtualDesign”) 及Camel(如 : “virtualDesign”)兩種命名方式,並建議避免使用分隔符號 (例如底線 “_” 或連字號 “-”) 來做命名 – CA1702。
- 可讀性優先於簡潔性(CanScrollHorizontally 優於 ScrollableX),並參考常用的命名(HorizontalAlignment 優於 AlignmentHorizontal)。
- 避免使用匈牙利命名法(如 : “strName”),並正確的使用前置及後置詞命名 – CA1720、CA1710。
- 正確的使用縮寫,縮寫字為兩個字母以內,則兩字皆為大寫 (如 : “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) |
其他注意事項:
接下來換紀錄一些常見的設計模式 (Design Pattern) 或慣用名稱吧!我個人是很重視可讀性和簡潔性,開發幾個月下來發現每個人風格不同,每當接下其他人寫得的項目的時候就會是 …. 需要一段陣痛期!因此擁有共同的規範和目標可以減少這類問題更專注開發在功能上囉。
偉大的 StackOverFlow 有人提出這類問題
Naming Classes – How to avoid calling everything a“<WhatEver>Manager”?
本篇文章就以上面的回答做紀錄,大部分下述的單字都是作為後綴 (suffixes) 來使用
下列三個是我目前都有使用過也應用在專案上,基本上類裡面都是放置靜態方法,但我目前對於這三個的理解上有些不同。
- Util (工具類):我通常作為工具類使用,像是放一些轉型方法或者是檔案處理相關
- Helper (輔助者):在現有專案中有看過,裡面寫了 Token 驗證處理相關,比較像是輔助 Token 驗證轉成實際的使用者類
- 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 (協作者):我目前還無法領悟,也許未來的某一天未來的我會理解吧?
接下來要介紹的也是常見的幾個類型
- Handler (處理器):處理 Message 相關 MessageHandler 用來處理訊息相關封裝、查詢、刪除
- Reader (讀取器):處理 Excel 讀取的 ExcelReader
- Writer (寫入器):處理 Excel 寫入的 ExcelWriter
- Provider (提供器):提供成員資訊的 MemeberInfoProvider
- Wrapper (包裝器):這部份我遇到的狀況是用來將要輸出的物件轉成 Json 透過公司內部規範的套件有個 wrap 方法就是
最後文末放上這個網址 http://source-code-wordle.de/ 網羅網路上常見的命名單字
參考資料
编程中的命名设计那点事
C# 项目开发规范
C# 编码规范
base-classes-for-implementing-abstractions
names-of-classes-structs-and-interfaces
abstract_class_naming_convention