PB命名规则及软件开发规范
软件的编写、维护和测试都是由多人协同完成的,这样在工作中就需要一些约定和规范来协调工作人员的工作。PB虽然吸收了很多RAD工具的优点,但工具只是设施、基础,还需要优秀的方法指导。这就需要我们制定软件书写标准以规范我们的程序开发。使程序具有很好的可读性、可维护性。
下面就pbl库划分、命名规范、注释规范、代码格式规范及界面规范进行约定。
一、应用程序pbl组成(假设应用名为app)
我们将对象进行分门别类存放,以便于查找和管理
1、 share.pbl:存放应用、菜单、公用函数、公用结构。或者命名为public.pbl 。
2、 app_win.pbl:存放窗口。
3、 app_dat.pbl:存放数据窗口对象。
4、 control.pbl:存放公用的用户对象(这些对象可以直接移植到其他的项目中使用)。
注:鉴于目前我们PB开发系统状况——【窗口】、【数据窗口对象】都比较多,第2点,3点规范不采纳,我们将对【窗口】、【数据窗口对象】都按系统大菜单的功能来命名pbl并存放在一起。
二、应用程序中对象命名规范
1、 窗口命名规范
窗口的名字以w_开头,后面加以描述其功能的英文单词。如w_label表示此窗口为标引窗口。如果A窗口为B窗口(w_label)的弹出窗口,则A窗口应命名为w_label_pop(pop为弹出窗口功能的英文名称)。(注:不做强制要求,直接w_模块功能名 也可以)
2、 数据窗口对象命名规范
数据窗口对象以d_开头,后面加上作为其数据源的表名。如以表stv_class为数据源建立的数据窗口对象应命名为d_stv_class。如果对d_stv_class进行了修改,如更改其显示风格、增加计算字段或检索参数等,则将其命名为d_winname_label(winname为窗口名,label功能名)。
注:对【数据窗口对象】再详细说明一下,按其功能作用再分命名方式。
报表: d_模块功能名
子报表: dwc_模块功能名
查找条件datawindow: dwf_模块功能名
Windows窗口里: dw_模块功能名
Datastore对象: ds_模块功能名
下拉列表框datawindow:dddw_模块功能名
3、 变量命名规范
全局变量命名:以gt_开头,其中t表示数据类型的第一个英文字母,后缀为变量功能名。
依次类推实例变量以it_开头,局部变量以lt_开头。
例如:存储xml文件ip地址的全局变量可定义为:string gs_xmlip。
存储窗口中ddlb当前选择的索引的实例变量可定义为 integer ii_index
在dw_1:clicked!中存储dw_1行数的变量可定义为 long ll_rownum
注:对于功能意义不大,如做循环用的临时变量 i, j 等可以直接定义不做额外要求。
4、 函数命名规范
全局函数以gf_开头,后缀为能表示其功能的英文名称,如gf_connectdb表示连接数据库的全局函数。
窗口函数以wf_开头,后缀为能表示其功能的英文名称,如wf_insertlb表示往listbox中添加数据。
用户对象中的函数以of_开头,后缀为能表示其功能的英文名称,如
of_expandchild表示扩展子节点。
鉴于目前我们PB开发系统状况——基本上用户对象中的函数都以ue_开头,所有此处我们用ue_开头。
5、 用户对象命名规范
用户对象以uo_开头,后面加其功能名,如uo_treeview示此对象具有树的功能,是通用对象的命名规则。如果对uo_treeview进行特定功能的扩展,则在其后加上应用的名称,如uo_treeview_app。
如果窗口中的控件是继承可视化的用户对象,则在此控件的property的tag
中应注明其父类的名字。
6、 菜单命名规范
菜单名称以m_开头,后缀为其所挂靠的窗口名称。如挂靠w_main窗口(mdi)
的菜单名为m_main。
7、 结构命名规范
结构名以str_开头,后缀为其功能名。
8、控件的命名规范
窗口上控件的命名以PB提供的缺省前缀为前缀,后缀为此控件的功能名称。
三、注释
1、 窗口注释
在窗口的注释中说明窗口的实现的主要功能。
2、 数据窗口对象注释
在数据窗口对象的注释中说明其主要功能及所应用的窗口名称。
3、 程序注释
在程序中说明代码块实现的主要功能。
例如:
//如果当前的行号无意义,则退出
if row<0 then
return
end if
注:对于不少人用 { if row < then return } 这种简略试写法,我们不提倡。这种漏写{ end if } 写法,对于多个 { if块 } 时不易阅读和调试,所以尽量避免。
4、 变量注释
对于全局变量和实例变量要注释说明其所要存储对象的意义。
例如:
String gs_xmlip //用于存储xml文件的ip地址
5、 函数、事件注释
在函数和事件的开始都要写上其所完成的功能,对于函数来说如果有参数的则要对参数进行说明。
例如:
事件注释:
//====================================================================
// 事件: .()
//--------------------------------------------------------------------
// 描述:
//--------------------------------------------------------------------
// 参数:
//--------------------------------------------------------------------
// 返回: (none)
//--------------------------------------------------------------------
// 作者: limin 日期: 2010年11月29日
//====================================================================
函数注释:
//====================================================================
// 函数: .()
//--------------------------------------------------------------------
// 描述:
//--------------------------------------------------------------------
// 参数:
//--------------------------------------------------------------------
// 返回: (none)
//--------------------------------------------------------------------
// 作者: limin 日期: 2010年11月29日
//====================================================================
6、 日常修改注释:
//====================================================================
// 修改:
//--------------------------------------------------------------------
// 作者: limin 日期: 2010年11月29日
//====================================================================
注:为节省代码空间,当然也不一定要求日常修改注释要多行,也可以只写一行注释语句。但是要求必须包括三部门:【修改人】、【修改日期】、【修改内容】。修改其他同事的代码时,原代码内容尽量保留并注释掉。
对于大块功能代码可以用 { // begin 功能名 } 和 { //end 功能名}
例如:
// begin 功能名
……….
……….
//end 功能名
四、代码格式规范
代码格式规范包括代码对齐,代码布局。
1、 根据功能或功能完成步骤将脚本用空行分隔成段。
例如:
dw_1.settransobject( sqlca)
dw_1.retrieve( )
insert_ddlb()
insert_lb()
2、 条件或循环语句中的代码要缩进。
例如:
if li_label=3 then
gb_2.text="未审校"
end if
3、 代码缩进一律使用tab键。默认tab值为3个空格
4、 变量全部用小写。
五、界面规范
1、窗口、菜单、控件的布局和风格要统一,控件布局要准确
窗口中的控件文字包括字体、颜色、大小、字体大小、字体粗细、背景颜色要一致,同一应用中的窗口和控件采用一种风格,而且在不同窗口中,功能相近的按钮最好设置在同样的位置。按钮控件需要进行细致布局,作到大小相等、行列对齐。
推荐用9号宋体最为屏幕显示字体,这是中文Windows中提供一种的适合屏幕显示的最小字体,这种字体没有毛刺,很自然。注:我们不一定要求是9号字,但是要和整套系统字体格式统一,一些标题等客户要求字体除外。
2、窗口标题文字描述统一规范
统一使用窗口功能名加上当前登录人。
例如:目前焦点窗口为标引管理,登录人为超级用户,则窗口标题应为:
标引管理==》超级用户。(注:该处不做要求,因为我们系统一般主界面的任务栏有显示登录用户)
3、窗口中隐藏控件不要太多
窗口中隐藏控件太多的话,会导致窗口内布局比较混乱,并且会给合作人造成理解上的困难。
4、图片文件的管理
图片文件要存放在一个统一的文件夹内,并将其命名为images。程序中图片的路径都取相对路径。针对目前我们pb开发系统有images,pic,sign三种文件夹命名,故以后都必须集中在pic文件夹下,以前的都不在处理。
六、数据库操作
在程序中利用SQL语句或数据窗口对数据库进行插入、删除、修改更新时,都要判断操作结果,如果成功则commit using sqlca;否则的话rollback using sqlca;
——————————————————————————————————————————————
pb编程中数据类型和变量的定义规则
一、.对象名称定义(命名规范)
objectscope_type_objectname--------//scope前缀
其中,objectscope 为:PFC_时,表示为PFC级别,否则为PFE级别(扩展级别)
type包含以下类型
基本对象:
m_ Menu
w_ Window
d_ DataWindow
dddw_ DropDownDataWinow
struc_ Structure
f_ Function
p_ Pipelines
用户对象:
nvoc_ 类用户对象(定制custom) //Custom class user object
nvos_ 类用户对象(标准standard) //Standard class user object
voc_ 可视用户对象(定制custom) //Visual user object custom
voe_ 可视用户对象(外部external) //Visual user object external
vos_ 可视用户对象(标准stardard) //Visual user object stardard
控件级对象:
类型 说明
cbx_ CheckBox
cb_ CommandButton
dw_ DataWindow
ddlb_ DropDownListBox
em_ EditMask
gr_ Graph
gb_ GroupBox
hsb_ HScrollBar
ln_ Line
lb_ ListBox
mle_ MultiLineEdit
ole_ OLE 2 0
ocx_ OCX
oval_ Oval
p_ Picture
pb_ PictureButton
rb_ RadioButton
r_ Rectangle
rr_ RoundRectangle
sle_ SingleLineEdit
st_ StaticText
uo_或u_ User Object
vsb_ VScrollBar
二、变量名称定义
<scope><datatype>_varialbename
Scope为以下值之一
类型 说明
G Global variable
L Local variable
i Instance variable
s Shared variable
简单变量的Type为以下值之一
类型 说明
a Any
b Boolean
d Date
dc Decimal
e Enumerated
l Long
s String
ui UnsignedInteger
blb Blob
ch Character
dtm DateTime
dbl Double
i Integer
r Real
tm Time
ul UnsignedLong
指针变量的Type值为以下之一
类型 说明
app Application
ab ArrayBounds
Cbx CheckBox
Cb CommandButton
Cd ClassDefinition
Cdo ClassDefinitionObject
Cn Connection
Cninfo ConnectionInfo
Cno ConnectObject
Cxk ContextKeyword
Cxinfo ContextInformation
Cpp Cplusplus
Ds DataStore
dw DataWindow
dwc DataWindowChild
drg DragObject
Drw DrawObject
ddplb DropDownPictureListBox
ddlb DropDownListBox
dwo DWObject
dda DynamicDescriptionArea
dsa DynamicStagingArea
Ed EnumerationDefinition
Eid EnumerationItemDefinition
Em EditMask
Env Environment
Err Error
ext ExtObject
Gr Graph
Go GraphicObject
grax GrAxis
grda GrDispAttr
Gb GroupBox
Hsb HorizontalScrollBar
inet Inet
ir InternetResult
类型 说明
Ln Line
Lb ListBox
Lv ListView
Lvi ListViewItem
Mfd MailFileDescription
Mm MailMessage
Mr MailRecipient
Ms MailSession
Mdi MDIClient
M Menu
Mc MenuCascade
Msg Message
Mle MultiLineEdit
Nv NonVisualObject
Oc OleControl
Oo OleObject
Ostg OleStorage
Omc OmControl
类型 说明
Omcc OmCustomControl
Omec OmEmbeddedControl
Omo OmObejct
Omstm OmStream
Omstg OmStorage
Oval Oval
P Picture
Pb PictureButton
Pbcpp PBToCPPObject
Plb PictureListBox
Pl PipeLine
Po PowerObject
Procall ProfileCall
Proclass ProfileClass
Proln ProfileLine
Prort ProfileRoutine
Pro Profiling
Rb RadioButton
类型 说明
Rec Rectangle
Rem RemoteObject
Rte RichTextEdit
Rrec RoundRectangle
Rteo RteObject
Scrd ScriptDefinition
Sle SingleLineEdit
Srv Service
St StaticText
Std SimpleTypeDefinition
Str Structure
Tab Tab
Tabpg TabPage
Tcan TraceActivityNode
Tcbe TraceBeginEdn
tcerr TraceError
Tcf TraceFile
Tcln TraceLine
类型 说明
Tcgc TraceGarbageCollect
Tco TraceObject
Tcrt TraceRoutine
Tcsql TraceSQL
Tct TraceTree
Tctn TraceTreeNode
Tcterr TraceTreeError
Tctsql TraceTreeSQL
tctgc TraceTreeGarbageCollect
tctln TraceTreeLine
Tcto TraceTreeObject
Tctrt TraceTreeRoutine
Tctu TraceTreeUser
tcu TraceUser
Td TypeDefinition
Tr Transaction
Trp Transport
Tv TreeView
类型 说明
Tvi TreeViewItem
Uo UserObject
Vrcd VariableCardinalityDefinition
vrd VariableDefinition
Vsb VerticalScrollBar
Wo WindowObject
W Window
三、函数名称定义
类型 说明
f_ 全局函数 Global Function
of_ 成员函数
wf_ 成员函数 Window Function
uf_ 成员函数 UserObject Function
mf_ 成员函数 Menu Function