代碼編寫規範說明書(c#與asp.net)

代碼編寫規範說明書(c#與asp.net)

目 錄
1 目的 
2 範圍
3 註釋規範
  3.1 概述
  3.2 自建代碼文件註釋
  3.3 模塊(類)註釋
  3.4 類屬性註釋
  3.5 方法註釋
  3.6 代碼間註釋
4 命名總體規則
5 命名規範
  5.1 變量(Variable)命名
  5.2 常量命名
  5.3 類(Class)命名
  5.4 接口(Interface)命名
  5.5 方法(Method)命名
  5.6 名稱空間Namespace)命名
6 編碼規則
  6.1 錯誤檢查規則
  6.2 大括號規則
  6.3 縮進規則
  6.4 小括號規則
  6.5 If Then Else規則
  6.6 比較規則
  6.7 Case規則
  6.8 對齊規則
  6.9 單語句規則
  6.10 單一功能規則
  6.11 簡單功能規則
  6.12 明確條件規則
  6.13 選用FALSE規則
  6.14 獨立賦值規則
  6.15 定義常量規則
  6.16 模塊化規則
  6.17 交流規則
7 編程準則
  7.1 變量使用
  7.2 數據庫操作
  7.3 對象使用
  7.4 模塊設計原則
  7.5 結構化要求
  7.6 函數返回值原則
8 代碼包規範
  8.1 代碼包的版本號
  8.2 代碼包的標識
  9 代碼的控制
  9.1 代碼庫/目錄的建立
  9.2 代碼歸檔
10 輸入控制校驗規則
  10.1 登陸控制
  10.2 數據錄入控制
附件1:數據類型縮寫表
附件2:服務器控件名縮寫表


1 目的
一.爲了統一公司軟件開發設計過程的編程規範
二.使網站開發人員能很方便的理解每個目錄,變量,控件,類,方法的意義
三.爲了保證編寫出的程序都符合相同的規範,保證一致性、統一性而建立的程序編碼規範。
四.編碼規範和約定必須能明顯改善代碼可讀性,並有助於代碼管理、分類範圍適用於企業所有基於.NET平臺的軟件開發工作

2 範圍

本規範適用於開發組全體人員,作用於軟件項目開發的代碼編寫階段和後期維護階段。

3 註釋規範
3.1 概述
a) 註釋要求英文及英文的標點符號。
b) 註釋中,應標明對象的完整的名稱及其用途,但應避免對代碼過於詳細的描述。
c) 每行註釋的最大長度爲100個字符。
d) 將註釋與註釋分隔符用一個空格分開。
e) 不允許給註釋加外框。
f) 編碼的同時書寫註釋。
g) 重要變量必須有註釋。
h) 變量註釋和變量在同一行,所有註釋必須對齊,與變量分開至少四個“空格”鍵。
如:int m_iLevel,m_iCount; // m_iLevel ....tree level
// m_iCount ....count of tree items
string m_strSql; //SQL
i) 典型算法必須有註釋。
j) 在循環和邏輯分支地方的上行必須就近書寫註釋。
k) 程序段或語句的註釋在程序段或語句的上一行
l) 在代碼交付之前,必須刪掉臨時的或無關的註釋。
m) 爲便於閱讀代碼,每行代碼的長度應少於100個字符。
3.2 自建代碼文件註釋
對於自己創建的代碼文件(如函數、腳本),在文件開頭,一般編寫如下注釋:
/******************************************************
FileName:
Copyright (c) 2004-xxxx *********公司技術開發部
Writer:
create Date:
Rewriter:
Rewrite Date:
Impact:
Main Content(Function Name、parameters、returns)
******************************************************/
3.3 模塊(類)註釋
模塊開始必須以以下形式書寫模塊註釋:

///<summary>
///Module ID:<模塊編號,可以引用系統設計中的模塊編號>
///Depiction:<對此類的描述,可以引用系統設計中的描述>
///Author:作者中文名
///Create Date:<模塊創建日期,格式:YYYY-MM-DD>
///</summary>


如果模塊只進行部分少量代碼的修改時,則每次修改須添加以下注釋:

///Rewriter Rewrite Date:<修改日期:格式YYYY-MM-DD> Start1:
/* 原代碼內容*/
///End1:

將原代碼內容註釋掉,然後添加新代碼使用以下注釋:

///Added by Add date:<添加日期,格式:YYYY-MM-DD> Start2:
///End2:

 
如果模塊輸入輸出參數或功能結構有較大修改,則每次修改必須添加以下注釋:

///<summary>
///Log ID:<Log編號,從1開始一次增加>
///depiction:<對此修改的描述>
///Writer:修改者中文名
///Rewrite Date:<模塊修改日期,格式:YYYY-MM-DD>
///</summary>

3.4 類屬性註釋
在類的屬性必須以以下格式編寫屬性註釋:

/// <summary>
/// <Properties depiction>
/// </summary>

3.5 方法註釋
在類的方法聲明前必須以以下格式編寫註釋

/// <summary>
/// depiction:<對該方法的說明>
/// </summary>
/// <param name="<參數名稱>"><參數說明></param>
/// <returns>
///<對方法返回值的說明,該說明必須明確說明返回的值代表什麼含義>
/// </returns>
///Writer:作者中文名
///Create Date:<方法創建日期,格式:YYYY-MM-DD>

3.6 代碼間註釋
代碼間註釋分爲單行註釋和多行註釋:
//<單行註釋>
/*多行註釋1
多行註釋2
多行註釋3*/
代碼中遇到語句塊時必須添加註釋(if,for,foreach,……),添加的註釋必須能夠說明此語句塊的作用和實現手段(所用算法等等)。

4 命名總體規則
? 名字應該能夠標識事物的特性。
? 名字一律使用英文單詞,而不能爲拼音。
? 名字儘量不使用縮寫,除非它是衆所周知的。
? 名字可以有兩個或三個單詞組成,但不應多於三個,控制在3至30個字母以內。
? 在名字中,多個單詞用大寫第一個字母(其它字母小寫)來分隔。例如:IsSuperUser。
? 名字儘量使用前綴而不是後綴。
? 名字中的單詞儘量使用名詞,如有動詞,也儘量放在後面。例如:FunctionUserDelete(而不是FunctionDeleteUser)。

5 命名規範
5.1 變量(Variable)命名
a) 程序文件(*.cs)中的變量命名
程序中變量名稱 = 變量的前綴 +代表變量含意的英文單詞或單詞縮寫。
? 類模塊級的變量請用“m_” +數據類型縮寫作爲前綴(其中,m 爲“memory”縮寫,數據類型縮寫見附件中的《數據類型縮寫表》)。

public class hello
{
private string m_strName;
private DateTime m_dtDate;
}


? 類的屬性所對應的變量,採用屬性名前加“m_”+ 類型縮寫 前綴的形式

public class hello
{
private string m_strName;
public string Name
{
get
{
return m_strName;
}
}
}


過程級的變量使用類型縮寫前綴

public class hello
{
void say()
{
string strSayWord;
}
}

? 過程的參數使用“p_”+ 類型縮寫作爲前綴(其中,p 爲“parameter”縮寫)

public class hello
{
void say(string p_strSayWord)
{
}
}

補充說明:
針對異常捕獲過程中的Exception變量命名,在沒有衝突的情況下,統一命名爲exp;
如果有衝突的情況下,可以用“exp”+ 標誌名稱,如:expSql。

Try
{
//your code
try
{
//code
}
catch(Exception exp)
{
//your code
}
}
catch(Exception expSql)
{
//your code
}

補充:如果捕獲異常不需要作任何處理,則不需要定義Exception實例。
例:

try
{
//your code
}
catch( Exception exp)
{
}

? 鑑於大多數名稱都是通過連接若干單詞構造的,請使用大小寫混合的格式以簡化它們的閱讀。每個單詞的第一個字母都是大寫.
? 即使對於可能僅出現在幾個代碼行中的生存期很短的變量,仍然使用有意義的名稱。僅對於短循環索引使用單字母變量名,如 i 或 j。
? 在變量名中使用互補對,如 min/max、begin/end 和 open/close。
? 不要使用原義數字或原義字符串,如 For (i = 1;i <= 7;i++)。而是使用命名常數,如 For (i = 1;i <= NUM_DAYS_IN_WEEK;i++) 以便於維護和理解。
b) 控件命名
控件命名 = 控件名稱前二到三個字母 + 名稱,如Labl控件(labUserName)

5.2 常量命名
常量名也應當有一定的意義,格式爲 NOUN 或 NOUN_VERB。常量名均爲大寫,字之間用下劃線分隔。
例:

private const bool WEB_ENABLEPAGECACHE_DEFAULT = true;
private const int WEB_PAGECACHEEXPIRESINSECONDS_DEFAULT = 3600;
private const bool WEB_ENABLESSL_DEFAULT = false;

注:
變量名和常量名最多可以包含 255 個字符,但是,超過 25 到 30 個字符的名稱比較笨拙。此外,要想取一個有實際意義的名稱,清楚地表達變量或常量的用途,25 或 30 個字符應當足夠了。
5.3 類(Class)命名
a) 名字應該能夠標識事物的特性。
b) 名字儘量不使用縮寫,除非它是衆所周知的。
c) 名字可以有兩個或三個單詞組成,但通常不應多於三個。
d) 在名字中,所有單詞第一個字母大寫。例如 IsSuperUser,包含ID的,ID全部大寫,如CustomerID。
e) 使用名詞或名詞短語命名類。
f) 少用縮寫。
g) 不要使用下劃線字符 (_)。
例:

public class FileStream
public class Button
public class String

5.4 接口(Interface)命名
和類命名規範相同,唯一區別是 接口在名字前加上“I”前綴
例:

interface IDBCommand;
interface IButton;

5.5 方法(Method)命名
和類命名規範相同。
5.6 命名空間(NameSpace)命名
和類命名規範相同。

6 編碼規則
6.1 錯誤檢查規則
a) 編程中要考慮函數的各種執行情況,儘可能處理所有流程情況。
b) 檢查所有的系統調用的錯誤信息,除非要忽略錯誤。
c) 將函數分兩類:一類爲與屏幕的顯示無關, 另一類與屏幕的顯示有關。對於與屏幕顯示無關的函數,函數通過返回值來報告錯誤。對於與屏幕顯示有關的函數,函數要負責向用戶發出警告,並進行錯誤處理。
d) 錯誤處理代碼一般放在函數末尾。
e) 對於通用的錯誤處理,可建立通用的錯誤處理函數,處理常見的通用的錯誤。
6.2 大括號規則
將大括號放置在關鍵詞下方的同列處,例如:

if ($condition) while ($condition)
{ {
... ...
} }

6.3 縮進規則
使用一個“Tab”爲每層次縮進。例如:

function func()
{
if (something bad)
{
if (another thing bad)
{
while (more input)
{
}
}
}
}

6.4 小括號規則
a) 不要把小括號和關鍵詞(if 、while等)緊貼在一起,要用空格隔開它們。
b) 不要把小括號和函數名緊貼在一起。
c) 除非必要,不要在Return返回語句中使用小括號。因爲關鍵字不是函數,如果小括號緊貼着函數名和關鍵字,二者很容易被看成是一體的。
6.5 If Then Else規則
如果你有用到else if 語句的話,通常最好有一個else塊以用於處理未處理到的其他情況。可以的話放一個記錄信息註釋在else處,即使在else沒有任何的動作。其格式爲:

if (條件1) // 註釋
{
}
else if (條件2) // 註釋
{
}
else // 註釋
{
}

注:if 和循環的嵌套最多允許4層
6.6 比較規則
總是將恆量放在等號/不等號的左邊。一個原因是假如你在等式中漏了一個等號,語法檢查器會爲你報錯。第二個原因是你能立刻找到數值而不是在你的表達式的末端找到它。例如:
if ( 6 == $errorNum ) ...
6.7 Case規則
default case總應該存在,如果不允許到達,則應該保證:若到達了就會觸發一個錯誤。Case的選擇條件最好使用int或string類型。
6.8 對齊規則
變量的申明和初始化都應對齊。例如:

int m_iCount;
int i,j;
float m_fIncome,m_fPay;

m_iCount = 0;
i = 1;
m_fIncome = 0.3;

6.9 單語句規則
除非這些語句有很密切的聯繫,否則每行只寫一個語句。
6.10 單一功能規則
原則上,一個程序單元(函數、例程、方法)只完成一項功能。
6.11 簡單功能規則
原則上,一個程序單元的代碼應該限制在一頁內(25~30行)。
6.12 明確條件規則
不要採用缺省值測試非零值。例如:使用“if ( 0 != f( ) )”而不用“if ( f( ) )”。
6.13 選用FALSE規則
大部分函數在錯誤時返回FALSE、0或NO之類的值,但在正確時返回值就不定了(不能用一個固定的TRUE、1或YES來代表),因此檢測一個布爾值時應該用 FALSE、0、NO之類的不等式來代替。例如:使用“if ( FALSE != f( ) )” 而不用“if (TRUE == f( ) )”。
6.14 獨立賦值規則
嵌入式賦值不利於理解程序,同時可能回造成意想不到的副作用,應儘量編寫獨立的賦值語句。例如:使用“a = b + c ; e = a + d;”而不用“e = ( a = b + c ) + d ”。
6.15 定義常量規則
對於代碼中引用的常量(尤其是數字),應該define成一個大寫的名字,在代碼中引用名字而不直接引用值。
6.16 模塊化規則
某一功能,如果重複實現一遍以上,即應考慮模塊化,將它寫成通用函數。並向小組成員發佈。同時要儘可能利用其它人的現成模塊。
6.17 交流規則
共享別人的工作成果,向別人提供自己的工作成果。
在具體任務開發中,如果有其它的編碼規則,則在相應的軟件開發計劃中予 以明確定義。

7 編程準則
7.1 變量使用
a) 不允許隨意定義全局變量。
b) 一個變量只能有一個用途;變量的用途必須和變量的名稱保持一致。
c) 所有變量都必須在類和函數最前面定義,並分類排列。
7.2 數據庫操作
a) 查找數據庫表或視圖時,只能取出確實需要的那些字段。
b) 使用無關聯子查詢,而不要使用關聯子查詢。
c) 清楚明白地使用列名,而不能使用列的序號。
d) 用事務保證數據的完整性。
7.3 對象使用
a) 儘可能晚地創建對象,並且儘可能早地釋放它。
7.4 模塊設計原則
a) 不允許隨意定義公用的函數和類。
b) 函數功能單一,不允許一個函數實現兩個及兩個以上的功能。
c) 不能在函數內部使用全局變量,如要使用全局變量,應轉化爲局部變量。
d) 函數與函數之間只允許存在包含關係,而不允許存在交叉關係。即兩者之間只存在單方向的調用與被調用,不存在雙向的調用與被調用。
7.5 結構化要求
a) 禁止出現兩條等價的支路。
例如:

if (a == 2)
else if (a== 3)
//
else if (a == 2)
//
else
//

b) 避免使用GOTO語句
c) 用 IF 語句來強調只執行兩組語句中的一組。禁止 ELSE GOTO 和 ELSE RETURN。
d) 用 CASE 實現多路分支
e) 避免從循環引出多個出口。
f) 函數只有一個出口。
g) 不使用條件賦值語句。
h) 避免不必要的分支。
i) 不要輕易用條件分支去替換邏輯表達式
7.6 函數返回值原則
1) 函數返回值
避免使用結構體等複雜類型
使用bool類型:該函數只需要獲得成功或者失敗的返回信息時候
使用int 類型:錯誤代碼用負數表示,成功返回0

8 代碼包規範
本項目中,每個任務在完成一個穩定的版本後,都應打包並且歸檔。
8.1 代碼包的版本號
項目中,代碼包的版本號由圓點隔開的兩個數字組成,第一個數字表示發行號,第二個數字表示該版的修改號。具體用法如下:
1) 當代碼包初版時,版本號爲 V1.00;
2) 當代碼包被局部修改或bug修正時,發行號不變,修改號第二個數字增1。例如,對初版代碼包作了第一次修訂,則版本號爲 V1.01;
3) 當代碼包在原有的基礎上增加部分功能,發行號不變,修改號第一個數字增1,例如,對V1.12版的基礎上增加部分功能,則新版本號爲 V1.20;
4) 當代碼包有重要修改或局部修訂累積較多導致代碼包發生全局變化時,發行號增1。例如,在 V1.15 版的基礎上作了一次全面修改,則新版本號爲 V2.00。
8.2 代碼包的標識
本項目所產生的代碼包都有唯一、特定的編碼,其構成如下:
S-項目標識-代碼包類型-版本號/序號
其中:
1) S:本項目的標識,表明本項目是“XXXX”。
2) 項目標識:簡要標識本項目,此標識適用於整個項目的文檔。
3) 代碼包類型:取自以下表的兩位字母編碼。
4) 版本號:本代碼包的版本號。
5) 序號:四位數字編碼,指明該代碼包在項目代碼庫的總序號。
例如:
一個Windows下RAR源碼的壓縮代碼包命名爲: S-XXXX-WS-V1.02/0001
項目的代碼包分類表
類 型 編 碼 注 釋
RAR包
(web) 源碼文件 WS 源代碼文件包
編譯文件 WB 編譯文件包
安裝文件 WI 安裝文件包
源碼代碼 + 安裝文件 WA 源代碼和安裝文件包

項目中所有代碼包的標識清單將在《項目開發計劃》中予以具體定義。

9 代碼的控制
9.1 代碼庫/目錄的建立
項目負責人在VSS中建立項目的文檔庫目錄,即爲“Software”目錄,以便快速查詢。
9.2 代碼歸檔
所有代碼在完成一個穩定的版本後,項目負責人都應打包後,存放於VSS中該目的“Software”目錄下,並且依據代碼包的命名規範爲代碼包分配一個唯一名稱。
10 輸入控制校驗規則
10.1 登陸控制
用戶登陸ID和登陸密碼,要限定輸入長度範圍,必須檢查輸入合法性。
10.2 數據錄入控制
a) TextBox輸入
1、 要保持用戶輸入和數據庫接收的長度一致
2、 必須進行輸入合法性校驗
如:E_mail格式 [email protected]...
電話格式 020-12345678 (020)12345678
郵政編碼是六位
b) 除CheckBox、RadioButton外,禁止在DataGrid內嵌入其他編輯控件,用以添加編輯數據

11. 數據庫命名規範:
SqlServer命名規範
使用本系統遵循以下命名規範:
1、表命名:用一個或三個以下英文單詞組成,單詞首字母大寫,如:DepartmentUsers;
2、表主鍵名稱爲:表名+ID,如Document表的主鍵名爲:DocumentID
3、存儲過程命名:表名+方法,如:p_my_NewsAdd,p_my_NewsUpdate;
4、視圖命名:View_表名,如:ViewNews;
5、Status爲表中狀態的列名,默認值爲0,在表中刪除操作將會改變Status的值而不真實刪除該記錄;
6、Checkintime爲記錄添加時間列,默認值爲系統時間;
7、表、存儲過程、視圖等對象的所有都爲dbo,不要使用數據庫用戶名,這樣會影響數據庫用戶的更改。

附件1:數據類型縮寫表

數據類型 縮寫
string   str
int   i
char   chr
sbyte   sb
byte   bt
uint   ui
long   l
ulong   ul
float   f
double   d
bool   b
decimal   dec

附註:數據庫服務器命名規範,控件名縮寫+控件作用單詞的全稱,如:btnNext, txtPassword(密碼文本框),txtRPassword(密碼確認文本框),單詞的第一個字母必須大寫如果有多個單詞,則爲控件縮寫+控件作用的第一個單詞+第二個單詞的全稱,每個單詞名的第一個字母必須大寫

附件2:服務器控件名縮寫表

a、web控件
web控件名 縮寫

AdRotator art
Button btn
Calendar cd
CheckBox chk
CheckBoxList chkl
CompareValidator cpv
CustomValidator ctv
DataGrid dg
DataList dl
DropDownList ddl
HyperLink hl
Image img
ImageButton Ibtn
Label lab
LinkButton lbtn
ListBox lst
Panel pl
PlaceHolder ph
RadioButton rb
RadioButtonList rbl
RangeValidator rv
RegularExpressionValidator rev
Repeater rp
RequiredFieldValidator rfv
Table tb
TableCell tc
TableRow tr
TextBox txt
ValidationSummary vs
XML XML

b、html控件
html控件名 縮寫
HtmlAnchor hah
HtmlButton hbtn
HtmlForm hform
HtmlGenericControl hgc
HtmlImage himg
HtmlInputButton(按鈕) htxt
HtmlInputButton(重置) hrbtn
HtmlInputButton(提交) hcbtn
HtmlInputCheckBox hick
HtmlInputFile hifile
HtmlInputHidden hihidden
HtmlInputImage hiimg
HtmlInputRadioButton hirb
HtmlInputText(密碼) hpwd
HtmlInputText(文本) hitxt
HtmlSelect hslt
HtmlTable htab
HtmlTableCell htc
HtmlTableRow htr
HtmlTextArea htxta

c.ADO.NET控件命名規範

類型 前綴 示例
Connection con conNorthwind
Command cmd cmdReturnProducts
Parameter parm parmProductID
DataAdapter dad dadProducts
DataReader dtr dtrProducts
DataSet dst dstNorthWind
DataTable dtbl dtblProduct
DataRow drow drowRow98
DataColumn dcol dcolProductID
DataRelation drel drelMasterDetail
DataView dvw dvwFilteredProducts
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章