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


代碼編寫規范說明書(c#.netasp.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控件(lblUserName)
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格式 XXX@XXX.XXX...
電話格式 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:數據類型縮寫表

數據類型    縮寫            示例

Array      arr               arrShoppingList
Boolean  bln               blnIsPostBack
Byte              byt               bytPixelValue
Char       chr               chrDelimiter
DateTime dtm             dtmStartDate
Decimal         dec                     decAverageHeight
Double    dbl               dblSizeOfUniverse
Integer  int                intRowCounter
Long       lng               lngBillGatesIncome
Object    obj               objReturnValue
Short      shr               shrAverage
Single     sng                     sngMaximum
String     str               strFirstName

附注:數據庫服務器命名規范,控件名縮寫+控件作用單詞的全稱,如:btnNext, txtPassword(密碼文本框),txtRPassword(密碼確認文本框),單詞的第一個字母必須大寫如果有多個單詞,則為控件縮寫+控件作用的第一個單詞+第二個單詞的全稱,每個單詞名的第一個字母必須大寫
附件2:服務器控件名縮寫表
a
web控件
web控件名                   縮寫                      示例
AdRotator                   adrt               adrtTopAd
Button                        btn                btnSubmit
Calendar                     cal                 calMeetingDates
CheckBox                   chk                chkBlue
CheckBoxList              chkl               chklFavColors
CompareValidator       valc               valcValidAge
CustomValidator         valx               valxDBCheck
DataGrid                      dgrd                     dgrdTitles
DataList                             dlst               dlstTitles
DropDownList             drop                     dropCountries
HyperLink                   lnk                 lnkDetails
Image                        img               imgAuntBetty
ImageButton              ibtn               ibtnSubmit
Label                          lbl                  lblResults
LinkButton                  lbtn               lbtnSubmit
ListBox                       lst                 lstCountries
Panel                          pnl                pnlForm2
PlaceHolder                plh                plhFomContents
RadioButton                rad                radFemale
RadioButtonList          radl               radlGender
RangeValidator           valg               valgAge
RegularExpressionValidator vale             valeEmail_Validator
Repeater                    rpt                 rptQueryResults
RequiredFieldValidator valr               valrFirstName
Table                          tbl                 tblCountryCodes
TableCell                     tblc               tblcGermany
TableRow                    tblr                tblrCountry
TextBox                             txt                 txtFirstName
ValidationSummary    vals               valsFormErrors
XML                            xmlc              xmlcTransformResults


bhtml控件
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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM