VB.NET/ASP.NET編碼規範(ZT)

來源:互聯網
上載者:User
asp.net|編碼|規範 在開發中保持良好的編碼規範是十分重要的。我所採用的新的VB.NET/ASP.NET編碼規範,是一種被證明能明顯改善代碼可讀性,並有助於代碼管理、分類的編碼規範。採用這種編碼規範,能避免如匈牙利命名法帶來的繁長首碼,便於記憶變數的用途。下面的介紹這種編碼規範。




一、類型級單位的命名

1、類

□以Class聲明的類,都必須以名詞或名詞短語命名,體現類的作用。如:

Class Indicator
□當類是一個特性(Attribute)時,以Attribute結尾,當類是一個異常(Exception)時,以Exception結尾:

Class ColorSetException

Class CauseExceptionAttribute
□當類只需有一個對象執行個體(全域對象,比如Application等),必須以Class結尾,如

Class ScreenClass

Class SystemClass
□當類只用於作為其他類的基類,根據情況,以Base結尾:

MustInherit Class IndicatorBase
□如果定義的類是一個表單,那麼名字的後面必須加尾碼Form,如果是Web表單,必須加尾碼Page:

Class PrintForm : Inherits Form '* Windows表單

Class StartPage : Inherits Page '* Web表單



2、枚舉和結構

同樣必須以名詞或名詞短語命名。最好體現枚舉或結構的特點,如:

Enum ColorButtons '以複數結尾,表明這是一個枚舉

Structure CustomerInfoRecord '以Record結尾,表明這是一個結構體


3、委派類型

□普通的委派類型以描述動作的名詞命名,以體現委派類型執行個體的功能:

Delegate Sub DataSeeker (ByVal SeekString As String)
□用於事件處理的委派類型,必須以EventHandler結尾,如:

Delegate Sub DataChangedEventHandler (ByVal Sender As Object, ByVal e As DataChangedEventArgs)


4、介面

與其他類型不同,介面必須要由I作為首碼,並用形容詞命名,突出表現實現介面的類將具有什麼能力:

Interface ISortable


5、模組

模組不是類型,他的名稱除了必須以名詞命名外,必須加以尾碼Module:

Module SharedFunctionsModule

上述所有規則的共同特點是,每個組成名稱的詞語都必須是大寫開頭,禁止完全大寫或小寫名稱。




二、方法和屬性的命名

1、方法

無論是函數還是子程式,方法都必須以動詞或動詞短語命名。無需區分函數和子程式,也無需指明傳回型別。

Sub Open(ByVal CommandString As String)
Function SetCopyNumber(ByVal CopyNumber As Integer)

參數需要指明ByVal還是ByRef,這一點寫起來會讓程式邊長,但非常必要。如果沒有特別情況,都使用ByVal。參數的命名方法,參考後面“變數的命名方法”。需要重載的方法,一般不寫Overloads,根據需要編寫重載的方法。


2、屬性

原則上,欄位(Field)是不能公開的,要訪問欄位的值,一般使用屬性。屬性以簡潔清晰的名詞命名:

Property Concentration As Single
Property Customer As CustomerTypes


3、事件

事件是特殊的屬性,只能在事件處理上下文中使用。命名的原則一般是動詞或動詞的分詞,通過時態表明事件發生的時間:

Event Click As ClickEventHandler
Event ColorChanged As ColorChangedEventHangler




三、變數和常數

常數以表明常數意義的名詞命名,一般不區分常數的類型:

Const DefaultConcentration As Single = 0.01

在嚴格要求的代碼中,常數以c_開頭,如c_DefaultConcentration,但最好不要用它,它會帶來輸入困難。

普通類型的變數,只要用有意義的名字命名即可,不可使用簡稱和無意義的名稱諸如A,x1等,下面給出了良好的例子:

Dim Index As Integer
Dim NextMonthExpenditure As Decimal

Dim CustomerName As String

不能起太長的名字,應該盡量簡潔,如下面的例子:

Dim VariableUsedToStoreSystemInformation As String '* 錯誤,太複雜了

Dim SystemInformation As String '* 正確,簡單明了

Dim sysInfo As String '* 錯誤,過於簡單

特殊情況可以考慮一個字母的變數:

Dim g As Graphic

對於控制項,應該指明控制項的類型,方法是直接在變數後面加以類名:

Friend WithEvents NextPageButton As Button '* 按鈕
Friend WithEvents ColorChoicerPanel As Panel '* 面版
Friend WithEvents CardFileOpenDialog As FileOpenDialog '* 檔案開啟對話方塊

等等,無需規定某種類型的變數的首碼,只需把類型寫在後面就行了,試對比下列代碼:

btnCancel.Text = "&Cancel"
CancelButton.Text = "&Cancel"

顯然後者更能使閱讀者明白變數的類型是一個按鈕。





四、首碼



1、 對象

1)標準對象

名稱
首碼
例子
說明

System.Array
arr
arrUsers
使用者集合

System.Boolean
bln
blnDoesUserExist
使用者是否存在

System.Byte
byt
bytStreamContent
位元組流內容

System.Char
chr
chrKeyPress
按鍵

System.DateTime
dte
dteCreatedDateTime
建立日期

System.Decimal
dec
decYearlySaleQuota
年度銷售額

System.Double
dbl
dblTotalPrice
總金額

System.Interger
int
intMessages
訊息數

System.Object
obj
objExternalFunction
外部功能

System.Single
sng
sngFinishRate
完成率

System.String
str
strLoginName
登陸名稱

System.Exception
exc
excRet
錯誤

System.Enum
enm
enmUserStates
使用者狀態

Structure
stu
stuEmployees
員工類型

System.Data.SqlClient.SqlConnection
cnn
cnnDatabase
資料庫連接

System.Data.SqlClient.SqlCommand
cmm
cmmUserAddUpdate
使用者添加更新

System.Data.SqlClient.SqlDataAdapter
sda
sdaUsers
使用者資料配接器

System.Data.SqlClient.SqlDataReader
sdr
sdrUserData
使用者資料讀取器










2)自訂對象

我們規定應該根據自訂對象的名稱來確定該物件類型的首碼,例子如下:

對象:SysSet

首碼:ss

例子:ssSafety



2、根據變數與常量的生存周期,我們應該定義不同的生存周期首碼以示區別,以便我們清楚該變數/常量的範圍。

a) 類、模組、組件、控制項

我們規定在類、模組、組件、控制項範圍內,變數的生存周期首碼應該添加“m_”(Module-模組)。例子如下:

名稱
首碼
例子
說明

System.Array
m_arr
m_arrUsers
使用者集合

System.Boolean
m_bln
m_blnDoesUserExist
使用者是否存在

System.Byte
m_byt
m_bytStreamContent
位元組流內容

System.Char
m_chr
m_chrKeyPress
按鍵

System.DateTime
m_dte
m_dteCreatedDateTime
建立日期

System.Decimal
m_dec
m_decYearlySaleQuota
年度銷售額

System.Double
m_dbl
m_dblTotalPrice
總金額

System.Interger
m_int
m_intMessages
訊息數

System.Object
m_obj
m_objExternalFunction
外部功能

System.Single
m_sng
m_sngFinishRate
完成率

System.String
m_str
m_strLoginName
登陸名稱

System.Exception
m_exc
m_excRet
錯誤

System.Enum
m_enm
m_enmUserStates
使用者狀態

Structure
m_stu
m_stuEmployees
員工類型

System.Data.SqlClient.SqlConnection
m_cnn
m_cnnDatabase
資料庫連接

System.Data.SqlClient.SqlCommand
m_cmm
m_cmmUserAddUpdate
使用者添加更新

System.Data.SqlClient.SqlDataAdapter
m_sda
m_sdaUsers
使用者資料配接器

System.Data.SqlClient.SqlDataReader
m_sdr
m_sdrUserData
使用者資料讀取器












b) 過程、函數、屬性、事件

我們規定在過程、函數、屬性、事件範圍內,變數的生存周期首碼應該添加“o_”(Owner-私人)。例子如下:

名稱
首碼
例子
說明

System.Array
o_arr
o_arrUsers
使用者集合

System.Boolean
o_bln
o_blnDoesUserExist
使用者是否存在

System.Byte
o_byt
o_bytStreamContent
位元組流內容

System.Char
o_chr
o_chrKeyPress
按鍵

System.DateTime
o_dte
o_dteCreatedDateTime
建立日期

System.Decimal
o_dec
o_decYearlySaleQuota
年度銷售額

System.Double
o_dbl
o_dblTotalPrice
總金額

System.Interger
o_int
o_intMessages
訊息數

System.Object
o_obj
o_objExternalFunction
外部功能

System.Single
o_sng
o_sngFinishRate
完成率

System.String
o_str
o_strLoginName
登陸名稱

System.Exception
o_exc
o_excRet
錯誤

System.Enum
o_enm
o_enmUserStates
使用者狀態

Structure
o_stu
o_stuEmployees
員工類型

System.Data.SqlClient.SqlConnection
o_cnn
o_cnnDatabase
資料庫連接

System.Data.SqlClient.SqlCommand
o_cmm
o_cmmUserAddUpdate
使用者添加更新

System.Data.SqlClient.SqlDataAdapter
o_sda
o_sdaUsers
使用者資料配接器

System.Data.SqlClient.SqlDataReader
o_sdr
o_sdrUserData
使用者資料讀取器
















五、標籤

標籤就是用於Goto跳轉的代碼標識,由於Goto並不推薦使用,所以標籤的使用也比較苛刻。標籤必須全部大寫,中間的空格用底線_代替,而且應該以_開頭,比如:

_A_LABEL_EXAMPLE:

如此定義標籤是為了與其他代碼元素充分區別。




六、名字空間

通常,一個工程使用一個名字空間,通常不需要用Namespace語句,而是在工程選項的“Root Namespace”中指定,使用根名字空間可以使代碼更加整齊,容易修改,這一點是VB十足的優點。名字空間的文法是:

公司名.產品名[.組件名的複數]

如:

Namespace COM.NET
Namespace COM.File.IO.Files

隨便起一個名字空間的名字絕對不是一個好主意,一定要遵守上述規定。





七、格式化

良好的格式化代碼對我們的瀏覽與維護有相當的好處。

1、 塊

.NET提供了#Region...#End Region塊控制。我們應該根據代碼所實現的功能分類並以塊組織起來。



2、 縮排

每個層次直接都應該以Tab進行縮排,而不是Space(空格鍵)。



3、 流

每個方法、函數、屬性、事件應該有且只有一個入口和一個出口。如果遇見多層嵌套而需要直接跳出的時候,請使用局部Boolean或者Integer變數來標示用以多層跳出。

譬如:

Private Function TestForReturn () As Boolean

Dim o_blnRet As Boolean=False

Dim i As Integer, l As Integer

For i=1 To 100

For l=1 To 10

If (x) Then

o_blnRet=True

Exit For

Else

End If

Next

If o_blnRet Then

Exit For

Else

End If

Next

Return o_blnRet '這裡是唯一出口

End Function






八、注釋

1、 準則

注釋的規則繁多,基本地:正常的注釋以'*開頭,單獨的'只用來注釋暫時不用的代碼

'* 這是普通的注釋
'* 這段代碼在調試正確後加入
'If UseHighSpeed(i) = True Then ....

這樣能夠方便的採用代碼注釋工具控制碼的使用。



2、類(包括WebForm、WinForm等)、模組、組件、控制項

每個類、模組、組件、控制項最開始的地方必須輸入該對象的資訊,範例內容與格式如下:

'******************************************************************

'*

'* 對象名稱:OnlineUpdateService

'* 命名空間: http://www.domain.cn/onlineupdate/OnlineUpdateService.asmx

'* 作 者:chs(Wilson Chan)

'* 功能說明:線上更新Web Services

'* 建立日期:2003/07/27

'* 修改日期:2003/09/5 16:59

'* 修改記錄:

'* □2003/07/31

'* 1.AddUpdateUserCategory/DeleteUserCategory

'* 2.AddUpdateUserState/DeleteUserState

'* 3.AddUpdateServerUpdate/DeleteServerUpdate

'* 4.AddUpdateClientUpdate/DeleteClientUpdate

'* 5.AddUpdateClientUpdateLog/DeleteClientUpdateLog

'* 6.GetServerUpdates/GetClientUpdates/GetClientUpdateLogs

'*

'******************************************************************

一般地,我們要求內容有:對象名稱、命名空間、作者、功能說明、建立日期、修改日期、修改記錄,特別地,我們要求修改記錄應該詳細敘述最近的修改。



3、方法、函數、事件與屬性

每個方法、函數、事件與屬性最開始的地方必須輸入該對象的資訊,範例內容與格式如下:

'*名稱:OnlineUpdateFileAddUpdate

'*功能:添加更改更新資訊

'*作者:chs

'*建立:2003/7/31

'*修改:2003/7/31

'*參數:intID:唯一標示

'* strTitle:標題

'* strVersion:版本

'* strVerifier:標示

'* strDescription:描述

'* strRelatedFile:相關檔案

'* strUpdatePackage:下載包

'* intState:狀態

'* dteCreatedDateTime:建立日期

'*返回:成功,True,反之,False

'*說明:

一般地,我們要求內容有:名稱、功能、作者、說明、建立、修改、參數與返回。







八、完整性

1、If...Else...End If

2、Select Case...Case Else...End Select





九、安全性

1、Try...Catch...Finally...End Try







十、最佳化

1、With

2、For...Next

3、Do Until...Loop

4、代碼重構







十一、其它

1、 快速鍵

2、





聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.