Visual Basic应用软件开发规范 网址www.mugua 木瓜软件工作室
附录1  Visual Basic应用软件开发规范
Visual Basic应用软件开发规范的目的,是使应用程序的结构和编码风格标准化,以便于阅读和理解,使代码更健壮,同时易于后期维护。
本开发规范主要规定了编写Visual Basic应用程序时,在命名约定、代码格式、代码注释、错误处理和界面设计方面的规范。这些规范不是一成不变的,我们也不可能样样都要标准化,但保持原则上的代码结构清晰,便于自己和他人的阅读理解,就足够了。
1.1  命名约定
1、变量命名约定
(1)变量应该被定义在尽可能小的范围内。全局(Public)变量可以导致极其复杂的状态,并且使一个应用程序的逻辑非常难于理解。全局变量也使代码的重用和维护更加困难。
范围声明位置可见位置(引用位置)
过程级 过程、子过程或函数过程中的Private、Dim 在声明它的过程中
模块级 窗体或代码模块(frm、bas)的声明部分中的 Private、Dim 窗体或代码模块中的每一个过程
全局 代码模块(bas)的声明部分中的 Public 应用程序中的每一处 (2)随着工程大小的增长,划分变量范围的工作也迅速增加。在类型前缀的前面放置单字母范围前缀标明了这种增长,但变量名的长度并没有增加很多。如果一个变量在标准模块或窗体模块中被声明为 Public,那么该变量具有全局范围。如果一个变量在标准模块或窗体模块中被分别声明为 Private,那么该变量有模块级范围。此用法一般用在大型程序中。
范围前缀示例
过程级 无 dblPayee
模块级 m mlngProceedID
全局 g glngRollID (3)变量数据类型,其前缀由三个字母组成,均需小写。而且前缀可以被扩展,用来指明变量范围。变量命名一律使用前缀+用途的命名方式。
变量类型前缀描述示例
Array arr 数组arrDyna
Boolean  bln 布尔值blnFound
Byte byt 字节型bytRasterData
Currency cur 货币型curProduct
Date  dat 日期型datStartRun
Double  dbl 双精度dblPayee
Error  err  错误对象errLoadData
Handle hnd 句柄hndForm
Integer  int 整型intCounter
Long  lng  长整型lngDistance
Object  obj  对象objCurrent
Single  sng  单精度sngAverage
String str 字符型strFirstName
Time tim 时间timEnd
网址www.mugua 《Visual Basic 6.0 完全自学手册》热销中
·2·
Visual Basic应用软件开发规范 网址www.mugua 木瓜软件工作室
2、控件命名约定
控件命名约定与变量命名相似,一律使用前缀+用途的命名方式。
控件类型前缀描述
Combobox cmb
下拉列表框
visual basic pdfCheckbox chk
检查框
Commandbutton cmd
命令按钮
Commondialog dlg
公共对话框
DBGrid/MSHFlexGrid/DataGrid grd 网格
Frame Fra
框架
Form frm
窗体
Image img
图像
Label lab
标签
Line lin  直线
Listbox lst
列表框
ListView lv
列表视图
MaskEditBox msk
掩码编辑框
Menu mnu
菜单
Optionbutton opt
选项框
Picture pic
图片框
Report rpt
报表
Scrollbar sbr
滚动条
Shape shp
图形
StatusBar st
状态条
Timer tmr
定时器
ToolBar  tb 工具条
Textbox txt
文本框
TreeView tv
树型视图说明:对于上面没有列出的控件,应该用唯一的由两个或三个字符组成的前缀使它们标准化,以保持一致性。只有当需要澄清时,才使用多于三个字符的前缀。例如,对于派生的或定制的控件象上述那样扩展其前缀,使得在真正使用了哪一个控件的问题上避免混淆。
3、数据库对象命名约定
数据库对象命名约定与变量命名相似,一律使用前缀+用途的命名方式。
数据库对象前缀示例
Container  con  conReports
Database  db  dbAccounts
DBEngine  dbe  dbeJet
Document  doc  docSalesReport
Field  fld  fldAddress
Group  grp  grpFinance
Index  ix  idxAge
Parameter  prm  prmJobCode
QueryDef  qry  qrySalesByRegion
Recordset  rec  recForecast
Relation  rel  relEmployeeDept
TableDef  tbd  tbdCustomers
User  usr  usrNew
Workspace  wsp  wspMine
4、常量命名约定
网址www.mugua 《Visual Basic 6.0 完全自学手册》热销中
Visual Basic应用软件开发规范 网址www.mugua 木瓜软件工作室·3·
常量名建议全部大写,使用下划线作为单词间的分隔符,单词尽量使用全名称。
对于常量名,应遵循与变量相同的约定,并加上Const关键字。如果是全局常量,应该使用Public 而不是早期版本的Global来声明变量,对一些常用词应该使用简写。
Public Const SC_CLOSE = &HF060
Public Const SC_MINIMIZE = &HF020
Public Const SC_MAXIMIZE = &HF030
5、函数命名约定
此处函数包括Sub和Function,以下将这两种过程统称为函数。
函数表示的是一个动作,所以它的结构应该是动词+名词,动词必须小写,后面的名称首字母大写,如:
getRollInfoState
loadProceedPayeeData
setUserPass
函数命名尽量不要使用缩写,而且它的名称应该使人一目了然,必须能够反映函数的作用,能够从名称就知道这个函数的功能,不要使用无意义的函数名称,如:getCode,readData。
另外,函数命名必须能准确表达所要实现的功能,不至于引起歧义。当函数名称不足以表达其功能时,使用在函数头部加上让调用者足够明白的注释。
参数的命名:参数命名的原则是全部小写,如果参数包括两个或以上的单词时,首单词字母小写,其它单词首字母大定,如showRows、isUpdate。
1.2  代码格式
1、代码格式目的
对代码进行格式化时,所要达到的目的:
通过将代码分割成功能块和便于理解的代码段,使代码更容易阅读和理解。
减少为理解代码结构而需要做的工作。
使代码的阅读者不必进行假设。
使代码结构尽可能做到格式清楚明了。
2、代码格式约定
(1)不要将多个语句放在同一行上
当多个语句出现在同一个代码行上,各个语句之间用冒号分开时,就很难确定一个语句在何处结束,另一个语句在何处开始,这无形之中就增加了代码的复杂性。
下面这段代码给人一个冗长的感觉
intXLeg = m_rectBound.Right - m_rectBound.Left: intYLeg = _
m_rectBound.Bottom - m_rectBound.Top
应该写成下面这个格式
intXLeg = m_rectBound.Right - m_rectBound.Left
intYLeg = m_rectBound.Bottom - m_rectBound.Top
(2)使用空白行将相关的语句组织在一起
在以下的情况,要插入空白行:
网址www.mugua 《Visual Basic 6.0 完全自学手册》热销中
·4·
Visual Basic应用软件开发规范 网址www.mugua 木瓜软件工作室  每个If...Then构造的前面和后面(尤其是If语句前的注释的前面)。
每个Select Case构造的前面。
每个循环的前面和后面。
变量块的说明的后面。
执行统一任务的两个语句组的中间。
应该在两个过程或函数之间插入两个空行。
(3)对很长的代码行使用行接续符
在语句中选定一个适当位置,将行接续符 & 置于该位置,并在行接续符的前面放置一个空格。接续符用于指明下一个代码行是当前代码语句的组成部分。当用行接续符将很长的S Q L语句分割成多个代码行时,它的好处是很明显的,例如:
If Not SqlRst("SELECT rol_proceed.id,proceed AS 公证事项名称 " _
& "FROM rol_proceed " _
& "INNER JOIN not_proceed " _
& "ON proceedid=not_proceed.id " _
& "WHERE rollid=2006060638") Then Exit Sub
(4)SQL语句格式
代码中书写的SQL语句要求SQL关键字全部大写,表名和字段名小写。例如:
"SELECT name FROM user_info WHERE accept=1"
2、代码缩进约定
缩进代码行后,阅读代码的人就能够直观地了解执行统一任务的各个语句的组织结构。当遇到以下情况时,代码要缩进一个TAB制表位(在本书一个制表位为4个字符):
(1)当使用End If时,在If语句后缩进
If intCurRecord > 1 Then
intCurRecord = intCurRecord - 1
End If
(2)在Else语句后缩进
If intCurRecord > 1 Then
intCurRecord = intCurRecord - 1
Else
MsgBox "已经是第一条记录!", vbInformation
Exit Sub
End If
(3)在Select Case语句后缩进
Select Case objTool.Name
Case Is = "Save"
Case Is = "Exit"
End Select
(4)在Case语句后缩进
Select Case objTool.Name
Case Is = "Save"
SaveData
Case Is = "Exit"
Unload Me
网址www.mugua 《Visual Basic 6.0 完全自学手册》热销中
Visual Basic 应用软件开发规范 网址
www.mugua  木瓜软件工作室
·5·
网址www.mugua  《Visual Basic 6.0 完全自学手册》热销中
End Select
(5)在For 语句后缩进
For intCount = 1 To intLastRecord        If intCount <> intTempRecord Then            Get #intFileNum, intCount, Cust            Put #2, , Cust        End If    Next
(6)在Do 语句后缩进
Do While Not Rst.EOF        cmbNotman.AddItem Rst(0)        Rst.MoveNext    Loop
(7)在With 语句后缩进
With Gridtask
.TextMatrix(0, 1) = "案卷号"        .TextMatrix(0, 2) = "公证类别"        .TextMatrix(0, 3) = "承办人"        .TextMatrix(0, 4) = "流程状态"        .ColWidth(0) = 0        .ColWidth(1) = 1000        .ColWidth(2) = 900        .ColWidth(3) = 700        .ColWidth(4) = 900    End With
(8)在调用Recordset 对象的Edit 或AddNew 方法后缩进。Update 或ConcelUpdate 方法的缩进层次应该与Edit 或AddNew 语句相同。
rstRollInfo.Edit    rstRollInfo(0) = strID    rstRollInfo(1) = strName    rstRollInfo.Update
(9)在调用BeginTrans 方法后缩进
Workspaces(0).BeginTrans    Do While Not rstRollInfo.EOF        intCounter = intCounter + 1        rstRollInfo.Edit
rstRollInfo(0) = strID        rstRollInfo(1) = strName        rstRollInfo.Update        rstRollInfo.MoveNext    Loop
Workspaces(0).CommitTrans
(10)对自定义数据结构的代码进行缩进
Private Type Customer        '定义客户资料记录类型    Customer_ID  As String * 3    Customer_Name
As String * 10

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。