PB编程规范
pb编码规范

目录1.引言 (1)2. 定义和通用要求 (2)2.1 标准数据类型 (2)2.2P OWER B UILDER的控件命名规则 (2)3. 命名规则 (3)3.1 基本命名规则 (3)3.2定制对象命名规则 (3)3.3各类函数命名规则 (4)3.4变量命名规则 (4)3.5用户自定义事件命名规则 (5)4.程序书写规范 (6)4.1注释及格式要求 (6)4.1.1源代码文件的注释 (6)4.1.2 函数或过程的注释 (6)4.1.3 语句的注释 (6)4.1.4 常量和变量的注释 (6)4.1.5制定对象的注释 (6)4.2缩进规则 (7)4.2.1控制结构的缩进 (7)4.2.2缩进的限制 (8)4.3书写建议(非硬性规定) (8)5.POWERBUILDER LIBRARY的分类原则 (8)6. 程序设计的组件化和框架结构 (8)7. 程序设计底层基类的开发 (9)1.引言本规范定义一个源码级应用程序的开发规范,它是借助PowerScript语言,在PowerBuilder开发环境下提供的标准化服务。
它可供应用开发人员及系统设计人员使用。
本规范描述开发人员关心的外部特性及设施,而不是描述为达到这些功能采用的内部结构技术。
适用于使用PowerBuilder作为系统开发平台,声明服从本规范的系统开发。
2. 定义和通用要求2.1 标准数据类型PowerBuilder有以下十四种标准的数据类型(见表2-1)。
2.2 PowerBuilder的控件命名规则在PowerBuilder中,各种控件的命名采用如下前缀:3. 命名规则3.1 基本命名规则本规范中采用的命名规则,基本模式为:前缀_功能或作用描述其中前缀根据定制对象,变量类型或函数类型的不同而变化。
功能或作用描述则是对具体定制对象完成的功能的抽象;函数实现的功能抽象;变量的作用名称。
3.2 定制对象命名规则定制对象命名规则如下表3-1:其中功能或作用描述的格式是未规定的。
PB编码规范

PB编码规范一、团队开发要求●服从团队开发纪律和进度安排●未经项目负责人或项目经理的许可,不允许擅自进行可能影响到其他人员工作的任何工作,如添加数据库表、修改数据库表结构等,如有必要,必须提出书面申请,说明原因及如何操作的详细说明●代码必须符合规范,项目负责人或项目经理有权责成开发人员修改其不符合规范的代码二、版本说明●软件版本号标准为A.B,其中A和B为0到99之间的数字●当A大于1且B为奇数时,表示当前版本为处于开发、测试阶段的版本,定义为”开发版”;当B为偶数时,表示当前版本为稳定、可实际运行的版本,定义为”稳定版”●当软件开始开发时,确定版本号为0.1;随着软件开发的进度,版本号随着每一次主要功能的完善而变化,最高达到0.99●软件初步完成后,确定该软件版本号为1.0 Beta X,X代表测试的次数,这意味着软件可投入实际应用测试;当1.0 Beta X版本推出并实际应用或试运行测试后,确定该软件版本号为1.0 RC,这意味着软件可投入实际应用运行;当1.0 RC版本运行达到某一时限后,则认为该版本已稳定,可完全正常使用,确定版本号为1.0,这意味着软件开发完成●软件升级时,如功能变化不大,则次版本号变化;如功能变化较大,主版本号变化,软件的最终版本号由项目负责人或项目经理确定三、对象命名规范●常用对象命名约定A.命名方式建议用匈牙利表示法,组成方式为A_B(A表示对象的类型,B表示该对象的描述),如:窗口的命名:w_功能代码_功能描述+编写人姓名简称数据窗口对象的命名:d__对应表名称+显示方式+编写人姓名简称菜单命名:m_功能代码_功能描述+编写人姓名简称用户对象:uo__功能代码_功能描述+编写人姓名简称B.对于对象的Comments项必须写出相应的作用,如:C.详细说明如下:PowerBuilder中,对象的命名一般采用如下前缀:Prefix Object---------------------------------------------------------------dw_ DataWindowsdddw_ DropDownDataWinowsf_ Functionsm_ Menusp_ Pipeliness_ Structuresu_ UserObjectsw_ Windows●函数命名规则:函数名=’函数适用范围代码’+f+’_’+’函数功能描述’,’函数适用范围代码’描述如下:g 全局函数w 窗口函数m 菜单函数u 用户对象函数例如:替换字符的全局函数命名:gf_replace()●PBL库组织原则Library的大小最好小于1MB,数量尽量最少,分类原则有两种:1.制定对象分类法如:将所有的窗口放在一个Library中2.功能模块分类法根据功能模块的划分,将属于该模块的对象放在一个Library中较大型项目建议采用第二种分类方法●控件命名规则控件的命名必须以控件名称缩写开头,加下划线(_),后接表意的英文字符控件命名前缀约定:Prefix Control---------------------------------------------------------------cbx_ CheckBoxcb_ CommandButtondw_ DataWindowddlb_ DropDownListBoxem_ EditMaskgr_ Graphgb_ GroupBoxhsb_ HScrollBarln_ Linelb_ ListBoxmle_ MultiLineEditole_ OLE 2 0ocx_ OCXoval_ Ovalp_ Picturepb_ PictureButtonrb_ RadioButtonr_ Rectanglerr_ RoundRectanglesle_ SingleLineEditst_ StaticTextuo_ User Objectvsb_ VScrollBar四、变量命名规范●变量命名总体原则:变量定义时加上注释标明其含义,如:String ls_name //验船师姓名变量命名规则为:变量类型+ 数据类型+ ‘_’+ 含义代码例如:字符型实例变量:is_id //登陆人员ID号日期型全局变量:gd_modify //修改日期一般变量,用小写字母●作用域命名约定:Prefix Scope---------------------------------------------------------------g_ Globals_ Sharedi_ Instancel_ Local●变量类型前缀约定:Prefix Datatype---------------------------------------------------------------b_ Booleanblob_ Blobd_ Doubledate_ Datedec_ Decimaldt_ DateTimei_ Integerl_ Longs_ Stringt_ Timeui_ Undisgned Intul_ Undisgned Longtr_ Transaction objectdo_ Dragobjectdwc_ DataWindowChildnvo NonVisulObject五、编程规范●书写格式用分层缩进的写法显示嵌套结构的层次,采用PB默认的Tab键(三空格)缩进;每行只写一条语句,当需要滚动显示时应该分行写●注释及格式要求1.对函数或过程必须加注释,函数头部说明函数功能和参数2.对语句不易理解的加注释3.对变量、常量应加注释,尤其是全局变量、常量4.用户自定义对象加标注对象的用途、制定人员、定义时间(修改时间)等注释●具体格式要求如下:1.在窗口Open事件前应说明//*======================================*///窗口名称://窗口作用://作者://日期://*=======================================*/2.在事件脚本前应说明://*=======================================*///脚本作用://作者://日期://修改人姓名://修改日期://修改原因://*=======================================*/若有多人修改,每人均加上姓名、日期、原因,对原有注释不可删除,在修改的地方加上修改人名,”Beginning Modification”,’Ending Modification”字样3.脚本中的注释单行注释://注释文本程序段注释://*=====================================*///// 注释文本////*=====================================*/变量注释:数据类型变量名//注释4.函数、存储过程的注释//*=====================================*///函数名称://参数解释://功能描述://调用举例://原作者://编写日期://返回值://变量情况://修改人://修改日期://修改原因://*=====================================*/5.脚本编程规范A.单行注释与当前Script程序的缩进位置对齐,如://Comments1If … Then//Comments2If …Then//Comments3…End IfEnd IfB.SQL语句书写格式:Select name,sex,dep_idInto :ls_name,:ls_sex,:ls_dep_idFrom employeeWhere emp_id=:ls_emp_id;C.PB保留字首字母大写其余小写,内部函数及属性每个字首字母大写其余小写,如:This,True,sle_user.Text,dw_1.SetTransObject(Sqlca)六、控件编程规范●公共约定:A.尽量为所有控件使用有意义的名称,重要控件不可使用cb_1之类无明确意义的名称B.字体:各窗口控件字体为宋体,字号为10号C.窗口用800x600分辨率大小●数据窗口规范显示风格:FREEFORM字体:宋体字号:10号背景色:自定义(RGB(242,241,238))标题:背景色同上,字体色:黑色,边框:NoBorder,居右放置,加冒号数据:背景色:白色,字体色:自定义(RGB(0,0,100)),边框:Box(2) ,居左放置不可编辑字段背景色为:SILVERTABLE ORDER顺序:先左右,后上下LABLE内字一般左对齐(货币、日期、时间等除外)编辑框高度:64 单位:采用PB默认的日期格式:YYYY-MM-DD日期和数字型的风格设定:EDIT选择EmptyStringsNullEDIT的类型如果使用DropDownDatawindow,宽度最好不用滚动条,要有纵向滚动条,不允许编辑ALLOWEDITINGFreeForm格式各字段间隔可根据具体情况自定,原则上不要出现滚动条即可显示风格:GRID字体:宋体字号:10号标题:自定义兰色RGB(99,143,195) 字体色:白色边框(Border):Raised(6) 高度:60数据显示风格: 采用”斑马线”式样在数据字段行->属性->背景(BackGround Color)->Expression下写入如下表达式:IF(MOD(GETROW(),2)=0,RGB(247,247,247), RGB(223,223,223)) //颜色显示记录) 各数据栏宽度:76 单位:采用PB默认的数据栏数据显示:一般长短不一的文字居左,数据项、货币居右,固定文字(如单位)居中计算字段的显示:要有统计记录条数;算字段背景色为自定义RGB(250,250,145),字体为黑色,计算字段行宽同数据栏宽度,计算行用矩形框(带边框),矩形框背景同计算字段背景色。
PowerBuilder程序编码规范

PowerBuilder程序编码规范1 全局变量命名规范全局变量以g开头,紧接类型+下划线变量功能名称,具体规则如以下Blob gblb_功能名Integer or Int gi_功能名Boolean gb_功能名Long gi_功能名Char gc_功能名character gc_功能名real gr_功能名Date gd_功能名String gs_功能名DateTime gdt_功能名Time gt_功能名Decimal gr_功能名Dec gr_功能名UnsignedInteger gui_功能名UnsignedInt gui_功能名UInt gui_功能名Double gr_功能名UnsignedLong gui_功能名ULong gui_功能名对象变量go_功能名或者g对象简写_功能名1.1.2 本地变量命名规范全局变量以l开头,紧接类型+下划线变量功能名称,具体规则如以下Blob lblb_功能名Integer or Int li_功能名Boolean lb_功能名Long li_功能名Char lc_功能名character lc_功能名real lr_功能名Date ld_功能名String ls_功能名DateTime ldt_功能名Time lt_功能名Decimal lr_功能名Dec lr_功能名UnsignedInteger lui_功能名UnsignedInt lui_功能名UInt lui_功能名Double lr_功能名UnsignedLong lui_功能名ULong lui_功能名对象变量lo_功能名或者l对象简写_功能名1.1.3 实例变量命名规范全局变量以i开头,紧接类型+下划线变量功能名称,具体规则如以下Blob iblb_功能名Integer or Int ii_功能名Boolean ib_功能名Long ii_功能名Char ic_功能名character ic_功能名real ir_功能名Date id_功能名String is_功能名DateTime idt_功能名Time it_功能名Decimal ir_功能名Dec ir_功能名UnsignedInteger iui_功能名UnsignedInt iui_功能名UInt iui_功能名Double ir_功能名UnsignedLong iui_功能名ULong iui_功能名对象变量io_功能名或者i对象简写_功能名1.1.4 函数和事件参数命名规范全局变量以a开头,紧接类型+下划线变量功能名称,具体规则如以下Blob ablb_功能名Integer or Int ai_功能名Boolean ab_功能名Long ai_功能名Char ac_功能名character ac_功能名real ar_功能名Date ad_功能名String as_功能名DateTime adt_功能名Time at_功能名Decimal ar_功能名Dec ar_功能名UnsignedInteger aui_功能名UnsignedInt aui_功能名UInt aui_功能名Double ar_功能名UnsignedLong aui_功能名ULong aui_功能名对象变量ao_功能名或者a对象简写_功能名1.1.5 窗口、函数、可继承对象命名规范窗口命名规范:w_模块名_功能名函数命名规范:f_模块名_功能名可继承对象命名规范:uo_模块名_功能名datawindow对象命名规范:d_模块名_功能名下拉datawindow命名规范:dddw_模块名_功能名窗体函数命名规范:wf_功能名可继承对象函数命名规范:uf_功能名窗口自定义事件命名规范:Ue_功能名可继承对象自定义事件命名规范:ue_功能名1.1.6 可视化控件命名规范一般遵循pb推荐的规则,即控件类型简写_功能名CommandButton cb_功能名PictureButton pb_功能名CheckBox cbx_功能名RadioButton rb_功能名StaticText st_功能名Picture p_功能名GroupBox gb__功能名Line ln_功能名Oval oval_功能名Ractangle r_功能名RoundRactangle rr_功能名SingleLineEdit sle_功能名EditMask em_功能名MultiLineEdit mle_功能名RichTextEdit rte_功能名HScrollBox hsb_功能名VScrollBox vsb_功能名DropDownListBox ddlb_功能名DropDownPictureListBox ddplb_功能名ListBox lb_功能名PictureListBox plb_功能名ListView lv_功能名TreeView tv_功能名Tab tb_功能名DataWindow dw_功能名Grap h gr_功能名OleControl ole_功能名UserObject uo_功能名TabPage tabpage_功能名一、库文件命名及对象存放库文件命名规范如下:<子系统代号>_[<模块代码_>]<对象分类缩写>[<序号>][_<功能描述>].pbl对象分类缩写如下表:对象分类缩写Window winDataWindow dwUserObject uoStructure strProject prjGlobal Function fnMenu mn其他(包括Application、主窗口、About窗口等)main例如一个销售子系统的库文件及说明如下表所示:库文件名说明sale_main.pbl 销售子系统的主应用对象库,包含Application、主窗口、主菜单等对象。
PB编程规范

一、编程对象的分类以PowerBuilder作为前台开发工具,进行软件开发的过程中,所涉及的编程对象如表1-1所示。
表1-1 编程对象分类二、编程对象的组织使用PowerBuilder开发工具产生的对象,可以按照设计(正在编写和调试)和运行(调试、编译结束,可以接受测试和运行)中的状态进行编程对象的组织规划,重点是目录结构的划分,具体目录的相对关系如表1-2所示。
三、团队开发a.服从团队开发纪律和进度安排。
b.未经项目负责人或项目经理的许可,不允许擅自进行可能影响其他人员工作的任何工作,如添加Library,添加数据库表等;如有必要,必须提出书面申请,说明原因以及要改动的操作的详细说明,由项目管理人员统一进行操作和协调。
c.代码必须符合标准规范,项目负责人或者项目经理有权责成开发人员修改其不符合开发规范的代码。
d.代码集中存放到文件服务器的某一目录,客户机统一映射为固定盘符,确保程序在任何时候都是完整的可用版本而不是零散的代码集,不允许拷贝到本地硬盘进行开发。
e.当编写某些公用部件和代码时,必须使用Check out 功能确保代码独占使用而不能让其他人同时也修改,当修改完成的时候必须及时使用Check in 功能确保代码消除独占状态以使其他人能及时使用修改后的代码。
f.各人设置自己在团队中的User ID:Library->Source->Connect->选择[PB Native]->设置User ID,填写自己姓名的拼音缩写或者英文名。
4.版本说明a.软件版本号标准为A . B,其中A和B为0到99之间的数字。
b.当A大于1并且B为奇数时,表示当前版本为处于开发、测试阶段的版本,定义为“开发版”;当B为偶数时,表示当前版本为稳定的、可实际运行的版本,定义为“稳定版”。
c.当软件开始开发时,确定版本号为0.1;随着软件开发的进度,版本号随着每一次主要功能的完善而变化,最高达到0.99。
PB 编码规范

PB 编码规范。
原来在聚赫的时候写的这是2010年写的一个规范给公司内部使用的。
PB毕竟是一个老语言了,命名规范和java,c# 差别很大其实代码规范见仁见智吧,良好的书写规范对自己没坏处的,当然对公司也大大的有好处,毕竟谁看到写的乱糟糟的代码心里都不爽。
但是真正能按照规范写代码的人毕竟不是太多,特别特别是代码的注释,更特别特别的是修改注释。
在看到蛋疼代码有蛋碎感的同时,还有一种想爆粗口的念头,想想别人看到咱们的代码会不会也有同样的感觉,所以大家尽量书写规范的代码,共勉。
变量命名规范(这样命名的变量很容易看明白这是实例,全局还是局部,已经变量的类型,变量的意义为修改代码带来方便)变量作用域+ 变量类型+ _ + 变量意义说明串一、变量作用域全局变量g_共享变量s_ //不推荐使用,共享变量不依赖于对象的实例存在实例变量i_局部变量l_注意:四种作用域前缀字母都为小写二、变量类型(以局部变量为例)数据类型类型声明前缀整形Integer li_字符型String ls_日期Date ld_日期时间DateTime ldt布尔Boolean lb_浮点Decimal ldec_Double Double ldou_注意:以上是主要的数据类型,前缀都是小写三、变量意义说明串变量说明字符串可以有2中写法1.推荐使用英文字符串做说明串,每个单词的首字母都要大写,如:ls_CheckedDate2.在英文不好表达时,可以使用中文全拼代替,前两个中文汉字使用全拼,首字母大写,后面汉字使用全拼的首字母,都要大写如:lb_DianJiLBTPX 点击列标题排序可能有人会说用拼音不好,要用英文。
相对于用词霸翻译过来的英文我更只是用中文拼音。
其实pb也支持直接用中文,呵呵四、变量声明1.变量类型使用全称,如:整类使用Integer 而不是Int2.变量类型首字母大写,其余字母全小写如:String3.变量声明尽量不要在一行中声明太多变量,分行处理,在变量不多时可以每行声明一个变量4.变量名称要具有一定的实际意义,做到见其名知其意,在比较难理解时在变量后面添加必要的注释文字程序注释[可以使用pbhelper来辅助完成]程序注释可分3种注释1.函数、事件的说明注释。
pb 编码规范

pb 编程规范声明:为了明确命名意图,所有命名使用英文单词或缩略词。
一. 对象/控件/函数/方法命名规范1.对象命名规则命名必须全部用小写字母, 可以用”_”作为分割符, 例如:2.控件命名规则3.方法/函数命名规则必须以小写字母开头, 采用大小写混合形式, 并且应足够长以描述它的作用. 而且, 方法名应以一个动词起首,如getUserRight()exitProgram()对于比较长的单词推荐使用缩略语以使名称的长度合理化. 当使用缩略语时, 要确保它在整个使用程序中的一致性. 如果一会儿使用Cnt, 一会儿使用 Count,将导致不必要的混淆。
二. 常量和变量命名约定1.常量必须全部大写, 如:constant int MAXVALUE=102.变量三. pb编码规范1.程序头注释约定所有类,接口的开始都要有关于这个类(接口)的注释:/*** Title: Pushclass* Description: function* Copyright: Copyright (c) 2000* Company: GE.Corp* @author: raogaohua* @version: 1.0*/2.函数/方法注释规范所有的函数/方法的开始都应该有描述这段代码的功能的一段简明注释. 但是这种描述不应该包括具体执行过程,因为这常常是随时间而变的,可能会成为错误的注释./*** Name: compString* Description: 找出一个String在一个String[]中位置index* Author: zhaoshouiang* @param strArray String数组* @param strFind 需要找的String* @return >=0:找到, 返回strDind在strArray中的index* -1: 没找到*/public int compString(String[] strArray, String strFind)在方法中的注释要求做到下列几点:A.每一个重要变量的声明应该包括一个嵌入注释,来描述变量的使用.B.变量、控件及函数/方法的命名应该足够清楚, 使得只有复杂的执行细节才需要嵌入注释.C.列举主要数据对象、函数/方法、算法、数据库及系统需求. 一段描述算法的伪代码能会有所帮助。
系统软件编制规范(PB)

目录一引言 (1)1 编写目的 (1)2 背景..................................................................................................... 错误!未定义书签。
二设计规范. (1)1 系统规划 (1)2 文件管理 (2)2.1 目录管理 (2)2.2 文件命名规范 (3)2.3 文件备份机制 (3)3 程序设计规范 (3)3.1 界面风格 (4)3.2 命名规范 (6)3.3 快捷键的定义 (10)3.4 编程规范 (10)3.5 编程风格 (11)系统软件编制规范一引言1编写目的统一整个软件的界面风格,确定软件编制过程中“库文件”、“控件”、“变量”、“对象”、等的命名规范,增强软件开发过程中的规范性、使用时的易维护性。
二设计规范1系统规划1.1计划制定1.2计划实施2文件管理2.1目录管理(1)目录开发过程中程序、文件、文档、备份等按功能要求分别存放在D:\code\app目录下的不同子目录下,具体如下:程序: D:\code\app\模块名流程图和文档: D:\code\app\doc\模块名可执行文件:D:\code\app\exe\模块名备份文件:D:\code\app\bak\模块名sql文件:D:\code\app\sql\模块名图片文件: D:\code\app\bmp\模块名(2)库文件(PBL)程序开发过程中的各种对象按功能分别存放不同的PBL中,并附加说明。
(如:有系统管理、计划管理、生产管理、物流分析及控制、采购管理、仓库管理、财务管理、通用查询、数据通信等模块,各模块主文件命名规则是模块名的汉语拼音缩写,分别对应如下:公共应用名称:tyfz父类组件:inherit.pbl(与业务无关)公共组件 pub.pbl(与业务有关)应用一:xtgl系统管理数据窗口:xtgl_dw.pbl系统管理窗口:xtgl_w.pbl系统管理函数及其它:xtgl_func.pbl应用二:jhgl计划管理数据窗口:jhgl_dw.pbl计划管理窗口:jhgl_w.pbl计划管理函数及其它:jhgl_func.pbl应用三:scgl生产管理数据窗口: scgl_dw.pbl生产管理窗口: scgl_w.pbl生产管理函数及其它: scgl_func.pbl应用四:wlkz物流分析及控制数据窗口: wlkz_dw.pbl物流分析及控制窗口: wlkz_w.pbl物流分析及控制函数及其它: wlkz_func.pbl应用五:cggl采购管理数据窗口:cggl_dw.pbl采购管理窗口:cggl_w.pbl采购管理函数及其它:cggl_func.pbl应用六:ckgl仓库管理数据窗口: ckgl_dw.pbl仓库管理窗口: ckgl_w.pbl仓库管理函数及其它: ckgl_func.pbl应用七:cwgl财务管理数据窗口: cwgl_dw.pbl财务管理窗口: cwgl_w.pbl财务管理函数及其它: cwgl_func.pbl应用八:tycx通用查询数据窗口: tycx_dw.pbl通用查询窗口: tycx_w.pbl通用查询函数及其它: tycx_func.pbl应用九:sjtx数据通信数据窗口: sjtx_dw.pbl数据通信窗口: sjtx_w.pbl数据通信函数及其它: sjtx_func.pbl各种对象应分类分别存放在相应的pbl中。
PB编程要求

20071219新增
1、当使用F_FkDataCheck()函数判断是否被应用时,切忌只要返回值不等于“1”时都是被应用了!
2、所有放在窗体上方的按钮之间的间距为默认单位值:18;即:当前按钮的X值和前面按钮的X+Width的差值为18;当按钮一行放不下的情况下分成多行显示!!!
b、所有放在窗口底部的按钮没有特殊需求的情况下都要使这组按钮对于窗口水平线左右居中,目测就可以了!
2、所有对数据窗口对象需要加条件进行刷新的操作,切忌直接通过GetSqlSelect()中查找From来进行Where条件相加,这样不利于程序的拓展,现有方法:通过窗口实例变量存取GetSqlSelect()结果,然后直接在这个变量的基础上进行条件拼接,这样有利于程序的维护和拓展!
2、查询条件数据的生成规则:
1)、如果基础数据中有拼音码的:条件生成规则为:拼音码左取8位并且都统一成大写+名称+150个空格+序号(主键ID序号)
2)、如果基础数据中没有拼音码有编码的:条件生成规则为:编码左取8位并且都统一成大写+名称+150个空格+序号(主键ID序号)
2)、如果基础数据中没有拼音码并且没有编码的:条件生成规则为:名称+150个空格+序号(主键ID序号)
20071221新增
1、数据窗口对象中挂子数据窗口对象的可编辑的字段一定要注意子数据窗口的显示宽度、勾选垂直滚动条属性、设置一次显示10条记录!!!
2、如果窗口上有“隐藏查询条件(Y)”按钮的一定要放在“返回”或“退出”按钮的前面!!即:按钮的倒数第二位!!!
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
编程规范(PB)1简介1.1简介这个文档描述了用于编写稳定、可靠的PowerBuilder应用程序的一些标准、约定和准则。
他们基于合理的,经过证实的一些使代码容易理解、维护和增强的软件工程的原则。
另外,遵循这些标准,你作为一个PowerBuilder程序员的生产力将有一个显著的提高。
一些经验证明,花时间在项目的开始写出高质量的代码,可以使在后来的开发过程中容易修改它,从而事半功倍。
最后,遵循这一系列编码规范,可以使一个开发团队更好地保持一致性,最终必将极大地提高团队的生产力。
1.2最初的准则和最终的准则当你无法找到一些你需要的原则或准则时,或者它们很明显地不适用,或者其它的一些情况下,请使用常识,按照一些基本的原理去作。
这个原则凌驾于其他原则。
2命名规范2.1一般性约定1.使用英文或汉语拼音的全称去准确地描述各种对象、变量例如,ls_UserName (用户名) ,ldc_GrandTotal(总计)等等。
尽管x1,y1这样的名称很容易拼写,因为它们很短,但是他们不可能明确地提示名称的含义,将导致代码难以理解、维护和改进。
2.使用大小写混合的方式命名3.以合适的方式使用缩写例如ll_RownNmber,简写为ll_RowNum是可以理解的,但是li_ReturnCode简写为li_rc就不一定被别人看懂,所以应该以尽量保守的态度使用缩写,在更多的时候使用全称,或者建立常用缩写的对照表。
4.避免太长的名称,尽量限制在15个字母以内长名称虽然很容易懂,但特别长将导致拼写时经常出错。
5.不要在第一个字母和最后一个字母使用下划线6.保持命名的一致性。
相关的东西应给以相关的名字,以说明他们的关系和差异2.2具体约定2.2.1对象命名规范<前缀>_名称注:名称为英文,新建对象必须加注释(菜单对象可例外)。
一般情况下,菜单对象的名称与其所属窗口的名称一致。
例子:w_master , m_master , d_cig_cdu_tvs is the TreeView visual user objectu_dw is the DataWindow visual user objectn_cst_dwsrv is the custom class user object for DataWindow servicesn_tr is the transaction standard class user object and is in the extension level2.2.2变量范围命名规范<范围><数据类型>_变量名范围:对于标准数据类型:例子:as_unitcode 表示事件或函数的输入参数,string类型idc_val 表示实例变量,decimal 类型li_row 表示局部变量,integer 类型gd_firstday 表示全局变量,date类型对于常用参照数据类型(reference variables):例子:datastore lds_unitDataWindowChild ldwc_cigwindow lw_code注:1) 尽量避免使用全局变量。
2) 全局变量和实例变量必须加注释(说明该变量在何处设置和使用);重要的局部变量加注释4)全局变量使用具有说明性(名字足够长)的名字,局部变量用短名字5)按常规方式使用的局部变量可以采用极短的名字。
例如:用i、j作为循环变量例如:在window的open()事件中对统计日期id_date赋值,在dw_unit.itemchanged()和cb_ok.clicked()中使用,则定义如下//Set: open//Use: dw_unit.itemchanged, cb_ok.clickedDate id_date //统计日期2.2.3函数命名规范<前缀>_ FunctionName例子:wf_GetTime, of_ GetTime, f_ GetTime注:不使用全局函数(使用用户对象封装);函数名采用动作性的名字,后面可以跟着名词2.2.4窗口中控件命名规范<前缀>_名称前缀参照PowerBuilder的缺省规定对于下拉数据窗口,使用如下命名方式:d_dddw_ + name另外,如果同类控件在窗口中出现两次以上,名称必须为英文,不能是数字。
例如:在同一窗口中有两个CommandButton,不能命名为cb_1和cb_2,,必须是有意义的名称,如cb_ok和cb_cancel。
2.2.5数据库对象命名规范数据库对象包括表、视图、触发器及存储过程等库名: 英文前三个字母表命名:小写,应尽量用英文,也可用拼音,视情况而定;表名前加比较短小的业务名称,推荐用两位汉语拼音简写(例如,储运,cy) ;主从表的命名,主表名_s;_s1;_s2;代码表后面加_cd;表名尽量短小精焊视图命名:v_名称,名称为表名或主要表名触发器命名:ti_表名(insert trigger)td_表名(delete trigger)tu_表名(update trigger)tui_表名,tud_表名,tid_表名,tuid_表名(复合trigger)存储过程:sp_名称列名:小写,连接符使用下划线;字符型尽量用varchar,尽量加长。
常用列名或列名后缀:代码:_cd;无意义:_id;名称:_nm;金额:_mny;数量:_qty;日期:_dt;标志:_mark;人:_er或_or;类型:_tp;审核人:verifier;部门:_dept;编号:_no;计量单位:jldw;大小:sz;重量:wg;备注:rem;率:_rate;制单人:maker;时间:_tm;开始时间:start_dt;结束时间:end_dt;批号:bat_no;周期:cycle3表达式和语句1.使用缩行显示程序的结构。
采用一种一致的缩行风格,是使程序呈现出结构清晰的最省力的方法2.使用表达式的自然形式。
例如:IF (Not (ldc_BlockId < ldc_ActBlks) Or Not (ldc_BlockId >= ldc_ActBlks)) Then在上面的语句中两个测试都用到了否定,而他们是不必要的,应该改变关系运算符的方向,是测试变成肯定的:IF ((ldc_BlockId >= ldc_ActBlks) Or (ldc_BlockId < ldc_ActBlks)) Then3. 用加括号的方式排出二义性。
括号表示分组,即使有时并不必要,加了括号也可能把意图表示的更清楚,上面的例子中,内层括号就不是必须的。
4. 分解复杂的表达式。
5. 当心副作用。
像++ 这一类的运算符具有副作用,它们除了返回一个之外,还将隐含地改变变量的值。
4界面设计4.1一般性约定界面设计是软件设计中很重要的一部分,一些优秀的系统大都拥有优秀的界面设计,一些大公司的界面设计往往精确到像素。
但是,很多人对优秀界面的理解就是“漂亮”甚至说“花哨”,而忽视了更重要的东西,这就有些不妥了。
那么一个优秀的设计应该具有什么样的特征呢?1、功能性界面设计必须符合功能的需要,这个是最重要的,界面是用户使用系统的途径,优秀的界面必须与功能的需求相统一。
应该重点突出,结构清晰,布局具有整体感。
用类似winamp的用户界面来处理数据应用的界面,就有点不伦不类了。
2、导航优秀的界面应该给用户舒适的导航,用户可以很容易找到相应的功能,或者可以引导用户正确的操作,避免错误。
重点的元素放在醒目的地方。
3、友好尽量不要出现用户看不明白的提示、专业术语或错误信息。
4、操作性一个优秀的界面设计,必须具有良好的操作性,符合大多数人的操作习惯,对于特殊应用,可快速操作也很重要。
5、时尚性密切注意流行界面的发展方向,当然也不是盲目跟从。
比如win98时代就不要再开发win32风格的界面了。
那么开发时应注意什么呢?1、整个系统应该风格统一,不要前后矛盾,比如前一个窗口中红色代表错误,在接下来的提示中又用红色来表示重要信息。
2、不要使用让用户产生歧义的图标、图形或文字,比如有人在退出按钮上写上“逃离”,又如,保存按钮写“就这样吧”等等。
3、尽量不要使用activeskin之类的换肤软件,其一这些皮肤其实并不美观,其二增加了系统出错机会,加大系统开发复杂度。
4、合理的结构设计,可能的情况下,将界面设计与业务逻辑独立开来,尽量不要将业务逻辑写到界面之中,比如有人在“确定”按钮里写了几百行的代码,所有功能都在里面了。
5、导航深度不要超过3层,有的设计往往要好几级菜单下才能找到相应的功能。
还有的功能必须要层层打开n个窗口后,才在一个角落里发现打开它的按钮。
6、不要使用太扎眼的元素,比如颜色,线条等。
例如一个使用亮绿色的提示窗口会让用户睁不开眼睛7、窗口元素布局要整齐划一,比如即使用不了那么长的文本框,也要使它与上面的文本框一样长8、不要在界面上出现可有可无的东西,有人用了一半的窗口面积描述这个窗口各个按钮的使用方法,此举纯属画蛇添足,因为一个熟练的用户闭着眼睛都知道下一步该按哪个键,当然面向大众的软件例外。
4.2 具体约定1、界面(包括Window和DataWindow)应在800*600分辨率下设计(同时应支持其它分辨率);整个系统一般使用9号宋体,个别情况(如标题)用大字体(14号宋体)2、同一窗口界面中颜色不能超过4种3、DropDownDataWindow的风格用Tabular,白底黑字,下拉后不能显示所有记录时,必须加垂直滚动条;grid 风格的DataWindow不要用下凹和灰底,在"Summary" 段加合计,显示共多少条记录等信息4、CommandButton 不能出现在左面和上面,不要紧贴窗口边界;普通CommandButton大小为352*92。
当与SingleLineEdit等其它控件合用时(如:在SingleLineEdit输入查询,在右面有一查询按钮),可以放在上面,并用Group围往5、不能含有无用的隐藏控件;不要用隐藏的datawindow, 用datastore代替6、按MDI风格设计,除主窗口上的菜单可带有toolbar外,其他窗口少用toolbar7、多个RadioButton(其中一个必须为Checked)和CheckBox用Group围住,点击后不能出现打开窗口等类似按钮的动作8、TabPage要有图标10、所有的日期用yyyy-mm-dd格式11、DataWindow的BorderStyle为StyleLowered,主细窗口之间的距离不超过20 PBU,宽高的设置应尽量避免横竖滚动条的同时出现12、窗口中的左上角和右下角的控件距窗口边界的距离为X:64PBU,Y:56PBU(14个Pixels)13、FreeForm类型的录入数据窗口,Text和Column的高度为56 PBU,一对Text和Column,之间的距离为0;Text后加单字节冒号“:”,右对齐;Column加下划线,左对齐;不可录入的Text和Column的Taborder为0,颜色为Navy14、Grid类型的录入数据窗口,Header和Detail的高度为84;标题不加粗,中间对齐;最左列加“行号”(如果无行号字段,用计算域getrow()),中间对齐;所有数字列右对齐,其它列左对齐,都为白底黑字;小计、合计的颜色为Navy,中间对齐,放在下面。