Try   HackMD

程式撰寫命名規則


第1章 命名規範

1. 類別

  1. 使用Pascal規則命名類別名,即開頭字母要大寫。
  2. 使用能夠反映類別功能的名詞或名詞片語命名類別。
  3. 不要使用“I”、“C”、“_”等特定含義字首。
  4. 自定義異常類別應以Exception結尾。
  5. 檔名要能反映類別的內容,最好是和類別同名。

規則 1.1

​​​Class Test
​​​{
​​​    ...
​​​}

規則 1.4

​​​Class TestException
​​​{
​​​    ...
​​​}

2. 字串(成員)

  1. 用camel規則來命名類別成員變數名稱,即單字開頭(或單字縮寫)小寫。
  2. 類別欄位變數名前可加“_”字首。
  3. 禁止在普通變數前加“m_”(這是VC老命名規則)。

規則 2

​​​Class Test
​​​{
​​​  privatestring myName;
​​​  privatestring _myCoCo;
​​​  ...
​​​}

3. 方法

  1. 方法名採用Pascal規則,第一個字元要大寫。
  2. 方法名應使用動詞或動詞片語。
  3. 類別中訪問修飾符或功能相同的方法應該放在一起, 且公共或實現介面的方法在前。
    規則 3
​​​Class Test
​​​{
​​​  ...
​​​  publicvoid GetData(...)
​​​  {
​​​     ...
​​​  }

​​​  privatevoid GetName(...)
​​​  {
​​​     ...
​​​  }

​​​  privatestatic void GetCount(...)
​​​  {
​​​     ...
​​​  }
​​​}

4. 屬性

  1. 使用名詞定義屬性,屬性使用Pascal規則,開頭字元大寫。
  2. 屬性和相應欄位名稱要關聯, 可以使用“重構”選單來生成屬性。
    規則 4
​​​Class Test
​​​{
​​​  private string myName;
​​​  public string MyName
​​​  {
​​​      set
​​​     {
​​​        myName = Value;
​​​     }
​​​     get
​​​     {
​​​        return myName;
​​​     }
​​​  }
​​​}

5. 參數

  1. 引數採用camel規則命名,且開頭字元小寫。
  2. 使用描述性引數名稱,引數名稱應當具有足夠的說明性。
  3. 不要給引數加匈牙利語型別表示法的字首。
  4. 檢查方法所有輸入引數的有效性。
    規則 5
​​​Class Test
​​​{
​​​  public void GetData(string name,string strFlag)
​​​  {
​​​     ...
​​​  }
​​​}

6. 常數

  1. 唯讀常數使用Pascal規則命名,即開頭字母大寫。
  2. 列舉名使用Pascal規則命名,列舉成員本質屬於常數,命名規則同上。
  3. 列舉值從小到大順序定義。
  4. 靜態欄位或屬性採用Pascal規則,即開頭字元大寫。
    規則 6
​​​Class Test
​​​{
​​​  public const double Pi = 3.14159365753;
​​​  private readonly double Pai = 3.14159365753;
​​​}

7. 介面

  1. 介面定義使用Pascal規則,且必須以大寫“I”開頭。
  2. 介面名稱要有意義,中間不要有下劃線“_”等字元。
  3. 如果類實現了介面,名稱儘量和介面相同, 只是省掉“I”字元。
    規則 7
​​​interface ITest
​​​{
​​​    ...
​​​}

8. 事件

  1. 委託名稱採用Pascal規則,即開頭字元大寫。
  2. 定義事件的委託要使用EventHandler字尾,且包括sender和e兩個參數。
  3. 事件用到的參數,名稱要帶EventArgs字尾。
    規則 8
​​​Class Test
​​​{
​​​  private delegate void DoTask();
​​​  private event DoTask DoTaskEventHandler;
​​​  private event DoTask DoTaskEventHandler(Object sender,EventArgse);
​​​  private event DoTaskDoTaskEventHandler2(string   strEventArgs)
​​​}

9. 命名空間

  1. 名稱空間名稱採用Pascal規則,且開頭字元大寫。
  2. 名稱空間名稱儘量反映其內容所提供的整體功能。
    規則 9
​​​namespace MyTest
​​​{
​​​  Class Test
​​​  {
​​​    ...
​​​  }
​​​    ...
​​​}

第2章 註解規範

1. 檔案標頭

  1. 檔案都包含檔案標頭, 要說明檔名、作者、建立時間、變更記錄。
  2. 推薦採用.NET形式書寫頭部註釋。(待考查)

2. 類別及成員

  1. 對方法和類別使用“///”三斜線註釋。
  2. 程式碼行文註釋採用“//”和“/**/”進行,應該儘量說明問題。

第3章 內文規範

1. 縮寫規範

  1. 識別符號應當直觀可望文知意,不提倡使用任何縮寫。
  2. 字串變數推薦是用“str”或“s”開頭,採用string.Empty來初始化。
  3. 普通物件可以以“obj”開頭。
  4. 縮寫可自行定義,一般取單詞的前/後字元組成,以含義直觀為準則。
  5. 一般情況下不要讓縮寫破壞識別符號的含義。

2. 排版

  1. 每行語句至少佔一行,如果語句過長(超過一個螢幕),則該語句斷為兩行顯示。
  2. 把相似的內容放在一起,比如欄位、屬性、方法、事件等,使用“#region#endregion”命令分組。
  3. 多個程式元素進行對等操作時, 邏輯運算子之前、之後或者前後都要加空格。
  4. 每個方法的源程式行數原則上應該少於200行。(如果超過過多,則需要另寫一方法)
  5. 語句巢狀層次不得超過3層。
  6. 避免相同的程式碼段在多個地方出現。(儘量避免程式碼重複,能重複利用則重複利用)

3. 語句結構

  1. 如果使用了異常結構,一定要處理異常, 一般是要寫日誌檔案。
  2. 分支語句不應該使用複雜長條件, 應該將長條件封裝成方法。
  3. switch語句,case後面必須接break。
  4. 禁止使用goto語句進行跳轉。
  5. 行文中嚴禁出現“魔術數字”,特定含義的常數必須定義成列舉或常量。
  6. 不同型別的操作符混合使用時,使用括號給出優先順序。
  7. 不允許使用複雜的邏輯運算子組合等。
  8. 迴圈、判斷語句的程式塊部分用大括號括起來, 即使只有一條語句。(return;待議)
  9. 在switch語句中總是要有default字句,建議使用斷言。
  10. 每個類別和方法完成單一的功能,不設計多用途面面俱到的類別或方法。
  11. 嚴禁使用未經初始化的變數,變數通常使用構造方法來初始。

4. 代碼縮排

  1. 碰到大括號要換行。
  2. 不允許使用Java中的括號換行規範。

5. 大小寫

  1. 不要建立名稱相同,但大小寫區別的任何元素。
  2. 不要把易混淆的數字和字元放在一起。
  3. 使用英文命名識別符號。

6. 重複名稱

  1. 不允許變數名、類別名、屬性名、 方法名等與系統識別符號重名。(系統識別符號見附表)

7. SQL編碼

  1. SQL語句全部大寫。
  2. 對較為複雜的SQL語句加上註釋,說明其功能。
  3. 連線符OR、IN、AND、以及=、<=、>=等前後加空格。
  4. 使用明確的列代替 SELECT *。

8. 軟體架構

  1. 資料庫中每一張表對應一個實體類/資料傳輸物件(DTO)。
  2. 實體類名稱使用表名,也可帶有Dto字尾。
  3. 三層架構應當合理使用,不應生搬硬套。
  4. 三層架構元素推薦使用字尾:
項目 命名
資料傳輸物件 XxxDAOFactory
DAO工廠 XxxDAOFactory
DAO介面 IXxxxDAO
服務介面 IxxxxService
DAO的資料庫實現 XxxxDAOOracle/XxxxDAOInfomix
業務邏輯 XxxxManager

9. 系統

  1. 系統輸入、資源操作(如記憶體分配、檔案及目錄操作)、網路操作(如通訊、呼叫等)、任務間的操作(如通訊、呼叫等)時必須進行錯誤、超時、或則異常處理。
  2. 模組的編寫應有完善的測試方面的考慮。

第4章 常見變數命名規則

CamelCase(駝峰式命名法, camelCase)

中文是完全照自命上去翻譯,就像駱駝的峰一樣。

  • 命名方式:通常是只第一單字小寫,其他單字大寫的情況。
  • 例子:getVariableName,cartItems,testHowToGetAName等
  • 常用場景:適用於一般變數/方法。

有人會依第一個字母的大小寫分為兩類:Lower Camel Case, Upper Camel Case,不過Upper Camel Case又稱為Pascal Case,所以比較少人這樣稱呼。
又因這個特性,所以有人會以camelCase稱呼,剛好第一個字小寫,第二個字大寫。

Pascal Case(Pascal Case)

如上面所述,有人也稱它為Upper Camel Case,泛指所有單字第一個自都大寫的命名方式。

  • 命名方式:單字都大寫。
  • 例子:UserRepository。
  • 常用場景: Class名稱。。

Snake Case(Snake_Case)

如字面的意思,像蛇一樣,所以是用底線連結。

  • 命名方式:在單字間加入底線。
  • 例子:ITEM_TYPE, created_at, updated_at等。
  • 常用場景:const變數名稱,資料庫欄位名稱。

Kebeb Case(Kebeb-Case)

Kebeb本身是烤肉串的意思,變數就像烤肉串一樣串在一起。

  • 命名方式:在單字間加入破折號hyphen。
  • 例子:good-to-eat, cart-item。
  • 常用場景:通常會用在網址。如本篇的naming-convention

第4章 參考資料

附表1 各種型別命名規範總結

型別 命名規則 注意事項 例項
類別或結構 Pascal 開頭字元大寫 HttpContext
介面 Pascal 前綴I IDataAdaper
列舉名 Pascal 開頭字元大寫 CommandType
列舉值 Pascal 開頭字元大寫 CommandType.Text
事件 Pascal 開頭字元大寫 SelectedIndexChanged
自定義異常 Pascal 後綴Exception ArgumentException
類公共欄位 Pascal 開頭字元大寫 MaxValue(或_MaxValue)
方法 Pascal 開頭字元大寫 ToString()
名稱空間 Pascal 開頭字元大寫 System.Xml
屬性 Pascal 開頭字元大寫 BackColor
保護或私有欄位 Camel 開頭字元小寫 myVariable
引數 Camel 開頭字元小寫 cmdText

附表2 資料型別縮寫規則

資料型別 資料型別縮寫 標準命名例項
Byte bt btImages
SByte sbt sbtImages
Short s sHandle
Unsigned Short ushort ushortHandle
Integer i iNumber
Unsigned Integer uint uintNumber
Long l lNumber
Unsigned Long ulong ulongNumber
Float f fPrice
Double d dPrice
Decimal dec decPrice
Char ch chCode
Bool is isVisable
Object obj objCloth
Unit u uAge
String str strName
DateTime dat datDay
Struct st stStudent
Window wnd wndMain
ArrayList lst lstStudents
Array arr arrStudents
List list listData
Hashtable ht htStudents

附表3 Windows控制元件撰寫規則

直接使用winform元件名添加底線後面接命名

控制元件型別 控制元件名稱 範例
label 標籤 label_Message
LinkLabel 超連結標籤 LinkLabel_Today
Button 按鈕 Button_Save
TextBox 文字方框 TextBox_Name
MainMenu 主選單 MainMenu_File
CheckBox 核取方框 CheckBox_Stock
RadioButton 單選按鈕 RadioButton_Selected
GroupBox 群組方框 GroupBox_Main
PictureBox 圖片方框 PictureBox_Image
Panel 面板 Panel_Body
DataGrid 數據顯示表格 DataGrid_View
ListBox 列舉方框 ListBox_Products
CheckedListBox 多選框列舉框 CheckedListBox_Items
ComboBox 下拉式方框 ComboBox_Style
ListView 列表檢視 ListView_Alarms
TreeView 樹狀檢視 TreeView_Files
TabControl 分頁控制 TabControl_Mode
DateTimePicker 日期時間選擇器 DateTimePicker_Hours
HscrollBar 水平捲軸 HscrollBar_Move
VscrollBar 垂直捲軸 VscrollBar_PowerControl
Timer 計時器 Timer_ReadStatus
ImageList 圖片列舉器 ImageList_Images
ToolBar 工具欄 ToolBar_Manage
StatusBar 狀態欄 StatusBar_FoorPrint
OpenFileDialog 檔案開啟對話方塊 OpenFileDialog_File
SaveFileDialog 檔案儲存對話方塊 SaveFileDialog_Save
FoldBrowserDialog 資料夾檢視對話方塊 FoldBrowserDialog_Folder
FontDialog 字體選擇對話方塊 FontDialog_Font
ColorDialog 顏色選擇對話方塊 ColorDialog_Color
PrintDialog 列印選擇對話方塊 PrintDialog_Print

附表4 資料庫物件撰寫規則

直接使用資料庫元件名添加底線後面接命名

資料庫物件 範例
Connection Connection_Northwind
Command Command_ReturnProducts
Parameter Parameter_ProductID
DataAdapter DataAdapter_Products
DataReader DataReader_Products
DataSet DataSet_Northwind
DataTable DataTable_Product
DataRow DataRow_Number
DataColumn DataColumn_Items
DataRelation DataRelation_OtherData
DataView DataView_AllData