VB.NET和ASP.NET編碼規(guī)范
在開(kāi)發(fā)中保持良好的編碼規(guī)范是十分重要的。我所采用的新的VB.NET/ASP.NET編碼規(guī)范,是一種被證明能明顯改善代碼可讀性,并有助于代碼管理、分類(lèi)的編碼規(guī)范。采用這種編碼規(guī)范,能避免如匈牙利命名法帶來(lái)的繁長(zhǎng)前綴,便于記憶變量的用途。下面的介紹這種編碼規(guī)范。
一、類(lèi)型級(jí)單位的命名
1、類(lèi)
(1)以Class聲明的類(lèi),都必須以名詞或名詞短語(yǔ)命名,體現(xiàn)類(lèi)的作用。如:
- Class Indicator
(2)當(dāng)類(lèi)是一個(gè)特性(Attribute)時(shí),以Attribute結(jié)尾,當(dāng)類(lèi)是一個(gè)異常(Exception)時(shí),以Exception結(jié)尾:
- Class ColorSetException
- Class CauseExceptionAttribute
(3)當(dāng)類(lèi)只需有一個(gè)對(duì)象實(shí)例(全局對(duì)象,比如Application等),必須以Class結(jié)尾,如
- Class ScreenClass
- Class SystemClass
(4)當(dāng)類(lèi)只用于作為其他類(lèi)的基類(lèi),根據(jù)情況,以Base結(jié)尾:
- MustInherit Class IndicatorBase
(5)如果定義的類(lèi)是一個(gè)窗體,那么名字的后面必須加后綴Form,如果是Web窗體,必須加后綴Page:
- Class PrintForm : Inherits Form '* Windows窗體
- Class StartPage : Inherits Page '* Web窗體
2、枚舉和結(jié)構(gòu)
同樣必須以名詞或名詞短語(yǔ)命名。***體現(xiàn)枚舉或結(jié)構(gòu)的特點(diǎn),如:
- Enum ColorButtons '以復(fù)數(shù)結(jié)尾,表明這是一個(gè)枚舉
- Structure CustomerInfoRecord '以Record結(jié)尾,表明這是一個(gè)結(jié)構(gòu)體
3、委派類(lèi)型
(1)普通的委派類(lèi)型以描述動(dòng)作的名詞命名,以體現(xiàn)委派類(lèi)型實(shí)例的功能:
- Delegate Sub DataSeeker (ByVal SeekString As String)
(2)用于事件處理的委派類(lèi)型,必須以EventHandler結(jié)尾,如:
- Delegate Sub DataChangedEventHandler (ByVal Sender As Object, ByVal e As DataChangedEventArgs)
4、接口
與其他類(lèi)型不同,接口必須要由I作為前綴,并用形容詞命名,突出表現(xiàn)實(shí)現(xiàn)接口的類(lèi)將具有什么能力:
- Interface ISortable
5、模塊
模塊不是類(lèi)型,他的名稱(chēng)除了必須以名詞命名外,必須加以后綴Module:
- Module SharedFunctionsModule
上述所有規(guī)則的共同特點(diǎn)是,每個(gè)組成名稱(chēng)的詞語(yǔ)都必須是大寫(xiě)開(kāi)頭,禁止完全大寫(xiě)或小寫(xiě)的名稱(chēng)。
二、方法和屬性的命名
1、方法
無(wú)論是函數(shù)還是子程序,方法都必須以動(dòng)詞或動(dòng)詞短語(yǔ)命名。無(wú)需區(qū)分函數(shù)和子程序,也無(wú)需指明返回類(lèi)型。
- Sub Open(ByVal CommandString As String)
- Function SetCopyNumber(ByVal CopyNumber As Integer)
參數(shù)需要指明ByVal還是ByRef,這一點(diǎn)寫(xiě)起來(lái)會(huì)讓程序邊長(zhǎng),但非常必要。如果沒(méi)有特別情況,都使用ByVal。參數(shù)的命名方法,參考后面“變量的命名方法”。需要重載的方法,一般不寫(xiě)Overloads,根據(jù)需要編寫(xiě)重載的方法。
2、屬性
原則上,字段(Field)是不能公開(kāi)的,要訪問(wèn)字段的值,一般使用屬性。屬性以簡(jiǎn)潔清晰的名詞命名:
- Property Concentration As Single
- Property Customer As CustomerTypes
3、事件
事件是特殊的屬性,只能在事件處理上下文中使用。命名的原則一般是動(dòng)詞或動(dòng)詞的分詞,通過(guò)時(shí)態(tài)表明事件發(fā)生的時(shí)間:
- Event Click As ClickEventHandler
- Event ColorChanged As ColorChangedEventHangler
三、變量和常數(shù)
常數(shù)以表明常數(shù)意義的名詞命名,一般不區(qū)分常數(shù)的類(lèi)型:
- Const DefaultConcentration As Single = 0.01
在嚴(yán)格要求的代碼中,常數(shù)以c_開(kāi)頭,如c_DefaultConcentration,但***不要用它,它會(huì)帶來(lái)輸入困難。
普通類(lèi)型的變量,只要用有意義的名字命名即可,不可使用簡(jiǎn)稱(chēng)和無(wú)意義的名稱(chēng)諸如A,x1等,下面給出了良好的例子:
- Dim Index As Integer
- Dim NextMonthExpenditure As Decimal
- Dim CustomerName As String
不能起太長(zhǎng)的名字,應(yīng)該盡量簡(jiǎn)潔,如下面的例子:
- Dim VariableUsedToStoreSystemInformation As String '* 錯(cuò)誤,太復(fù)雜了
- Dim SystemInformation As String '* 正確,簡(jiǎn)單明了
- Dim sysInfo As String '* 錯(cuò)誤,過(guò)于簡(jiǎn)單
特殊情況可以考慮一個(gè)字母的變量:
- Dim g As Graphic
對(duì)于控件,應(yīng)該指明控件的類(lèi)型,方法是直接在變量后面加以類(lèi)名:
- Friend WithEvents NextPageButton As Button '* 按鈕
- Friend WithEvents ColorChoicerPanel As Panel '* 面版
- Friend WithEvents CardFileOpenDialog As FileOpenDialog '* 文件打開(kāi)對(duì)話框
等等,無(wú)需規(guī)定某種類(lèi)型的變量的前綴,只需把類(lèi)型寫(xiě)在后面就行了,試對(duì)比下列代碼:
- btnCancel.Text = "&Cancel"
- CancelButton.Text = "&Cancel"
顯然后者更能使閱讀者明白變量的類(lèi)型是一個(gè)按鈕。
#p#
四、前綴
1、對(duì)象
1)標(biāo)準(zhǔn)對(duì)象
2)自定義對(duì)象
我們規(guī)定應(yīng)該根據(jù)自定義對(duì)象的名稱(chēng)來(lái)確定該對(duì)象類(lèi)型的前綴,例子如下:
對(duì)象:SysSet
前綴:ss
例子:ssSafety
2、根據(jù)變量與常量的生存周期,我們應(yīng)該定義不同的生存周期前綴以示區(qū)別,以便我們清楚該變量/常量的范圍。
a) 類(lèi)、模塊、組件、控件
我們規(guī)定在類(lèi)、模塊、組件、控件范圍內(nèi),變量的生存周期前綴應(yīng)該添加“m_”(Module-模塊)。例子如下:
b) 過(guò)程、函數(shù)、屬性、事件
我們規(guī)定在過(guò)程、函數(shù)、屬性、事件范圍內(nèi),變量的生存周期前綴應(yīng)該添加“o_”(Owner -私有)。例子如下:
五、標(biāo)簽
標(biāo)簽就是用于Goto跳轉(zhuǎn)的代碼標(biāo)識(shí),由于Goto并不推薦使用,所以標(biāo)簽的使用也比較苛刻。標(biāo)簽必須全部大寫(xiě),中間的空格用下劃線_代替,而且應(yīng)該以_開(kāi)頭,比如:
_A_LABEL_EXAMPLE:
如此定義標(biāo)簽是為了與其他代碼元素充分區(qū)別。
六、名字空間
通常,一個(gè)工程使用一個(gè)名字空間,通常不需要用Namespace語(yǔ)句,而是在工程選項(xiàng)的“Root Namespace”中指定,使用根名字空間可以使代碼更加整齊,容易修改,這一點(diǎn)是VB十足的優(yōu)點(diǎn)。名字空間的語(yǔ)法是:
公司名.產(chǎn)品名[.組件名的復(fù)數(shù)]
如:
- Namespace COM.NET
- Namespace COM.File.IO.Files
隨便起一個(gè)名字空間的名字絕對(duì)不是一個(gè)好主意,一定要遵守上述規(guī)定。
七、格式化
良好的格式化代碼對(duì)我們的瀏覽與維護(hù)有相當(dāng)?shù)暮锰帯?/p>
1、塊
.NET提供了#Region...#End Region塊控制。我們應(yīng)該根據(jù)代碼所實(shí)現(xiàn)的功能分類(lèi)并以塊組織起來(lái)。
2、縮進(jìn)
每個(gè)層次直接都應(yīng)該以Tab進(jìn)行縮進(jìn),而不是Space(空格鍵)。
3、流
每個(gè)方法、函數(shù)、屬性、事件應(yīng)該有且只有一個(gè)入口和一個(gè)出口。如果遇見(jiàn)多層嵌套而需要直接跳出的時(shí)候,請(qǐng)使用局部Boolean或者Integer變量來(lái)標(biāo)示用以多層跳出。
譬如:
- 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、準(zhǔn)則
注釋的規(guī)則繁多,基本地:正常的注釋以'*開(kāi)頭,單獨(dú)的'只用來(lái)注釋暫時(shí)不用的代碼
'* 這是普通的注釋
'* 這段代碼在調(diào)試正確后加入
'If UseHighSpeed(i) = True Then ....
這樣能夠方便的采用代碼注釋工具控制代碼的使用。
2、類(lèi)(包括WebForm、WinForm等)、模塊、組件、控件
每個(gè)類(lèi)、模塊、組件、控件最開(kāi)始的地方必須輸入該對(duì)象的信息,樣例內(nèi)容與格式如下:
一般地,我們要求內(nèi)容有:對(duì)象名稱(chēng)、命名空間、作者、功能說(shuō)明、創(chuàng)建日期、修改日期、修改記錄,特別地,我們要求修改記錄應(yīng)該詳細(xì)敘述最近的修改。
3、方法、函數(shù)、事件與屬性
每個(gè)方法、函數(shù)、事件與屬性最開(kāi)始的地方必須輸入該對(duì)象的信息,樣例內(nèi)容與格式如下:
一般地,我們要求內(nèi)容有:名稱(chēng)、功能、作者、說(shuō)明、創(chuàng)建、修改、參數(shù)與返回。
【編輯推薦】