MIS系统编码规范
编写本规范目的
编写本规范的目的在于提高代码的可读性与可维护性,规范项目组成员形成一种统一的编码风格,便于代码在项目组成员之间的沟通与交流。解决每个人只能读懂自己编写代码问题,也有利于项目的移交。当前,Delphi 开发工具特别适合于开发应用程序类型的数据库管理系统,C#比较适合开发Web应用的系统,本编码规范主要是针对 Delphi、C# 两种开发工具,说明在编程开发过程中应该注意的一些事项。
在数据库管理系统的开发过程中,所涉及到的基本功能模块可以划分为:编辑模块Edit Module(包括增加与修改)、查询模块Browse Module、统计模块Stat. Module、报表打印模块Report Module、系统公共通用函数模块System Common Function Module、系统统用数据结构模块System Common Data Type Module以及系统公共的数据库连接访问模块System Data Access。以下将基于这种结构的数据库管理系统,说明代码规范。 
本规范主要是根据本人近年来的实际工作中经验与教训,对编码以及代码质量、代码的可控制性上的一个总结,规范本身可能会存在一些不合理的地方,欢迎大家批评指正,便于本规范的不断完善。
模块级编码规范
1、窗体/页面命名规范
通常,带有窗体/页面模块的,窗体命名规则是:Fm/Pg + 操作类型 + 业务名称,操作类型通常包括:编辑(Edt)、查询(Brw)、统计(Stat)、报表(Rpt),业务名称通常和数据库中对应的业务表名称相关。这样,可以很直观看出来该模块和数据库中的哪类业务相关。并且通过操作类型能够知道该窗体的功能。
比如,前台销售模块,数据库中的表名称为:S_Sale_M(销售主表)和S_Sale_S(销售明细表),如果为前台开单业务逻辑模块命名,那么可以把窗体名称取名为:FmEdtSale/PgEdtSale,前台开单查询可以取名为:FmBrwSale/PgBrwSale,前台开单统计可以命名为:FmStatSale/PgStatSale,打印编辑模块单据可以采用(Fm/Pg)RptEdtSale,打印查询模块结果数据可以采用(Fm/Pg)RptBrwSale。
2、控件命名规范
控件命名规范:控件功能/类别(小写的英文字母)+控件关联数据库字段含义(第一个字母大写),Delphi中,如果与数据库直接关联,用db+控件功能/类别(第一个字母大写)+控件关联数据库字段含义(第一个字母大写)。
1、 编辑控件,文本框规范:Delphi中,edtHandler,表示TEdit控件,它关联到数据库中的Handler字段。Delphi中还有与数据库直接关联的TDBEdit控件,则命名规则为:dbEdtHandler。C#中,txtHandler,表示TextBox控件,关联到数据库的Handler字段。
2、 组合框控件,在Delphi中,cbx作为前缀,加上数据库字段,如果是数据库关联控件,则用dbCbx+数据库字段。在C#中,采用ddl+数据库关联字段,表示DropDownList与数据库字段关联控件。
3、 列表框,在Delphi与C#中,都采用lst控件。Delphi中还有与数据库直接关联的TDBListBox控件,则命名为dbLst+关联字段名称。
4、 复选框,在Delphi与C#语言中,皆采用chk+关联字段,Delphi中采用dbChk+关联字段表示 TDBCheckBox。
5、 单选框,在Delphi与C#中,皆采用rdb表示RadioButton。
6、 标签Label,如果标签在代码中,将利用到它,则标签也需要纳入命名规范,其命名规范为lbl+关联字段。
7、 图片字段,在Delphi与C#中,皆采用img表示Image。
8、 按钮,不管采用何种控件充当按钮角色,都用btn+按钮功能。比如,增加按钮,命名规范为:btnNew。
9、 网格控件DataGrid/DBGrid,在Delphi与C#中,皆采用dtg+业务表名称,比如dtgSale,表示网格中显示的是销售内容数据列表。
10、 数据列表,在Delphi与C#中,皆采用dtl+关联字段。
11、 数据存储与访问控件,数据集用ds+关联表名称,数据视图采用dv+关联表名称。Command对象用dbCmd,Connection用dbCnn,DataAdapter用dbDtp。
3、模块命名规范
带窗体功能模块其窗体的命名规范是:Fm/Pg + 操作类型 + 业务名称,那么对应的原文建起命名规范可以采用:操作类型 + 业务名称。比如,前台开单功能模块,窗体名称可以取名为:FmEdtSale/ PgEdtSale,其源文件可以命名为:EdtSale.pas/ EdtSale.aspx。
4、代码编码规范
1)、变量命名规范:模块私有变量命名用m_变量含义名,比如:m_Result表示模块的返回结果值。函数级变量去掉 m_就可以了。
2)、事件里面的代码尽量少(一般不超过5行),采用事件有一个缺点,一旦某事件取消,那么里面的代码也会跟着消失或者成为垃圾代码。如果非得在事件里面写代码,那么里面的代码尽量简介,通常不超过5行,超过5行的可以考虑采用函数或者过程来涵盖事件里面的那些代码。
3)、自定义的函数与过程在前,后面紧跟着事件代码。
4)、可以预先知道的异常,不通过try…except/try…catch来捕捉,通过代码校验来处理。因为系统发出的异常通知,效率比较低下,并且系统开销也较大。待续…