1. 目的
为了统一公司软件开发的设计过程中关于代码编写时的编写规范和具体开发工作时的编程规范,保证代码的一致性,便于交流和维护,特制定此规范。 2. 范围
本规范适用于开发组全体人员,作用于软件项目开发的代码编写阶段和后期维护阶段。 3. 注释规范
.概述
a) 注释要求中文及中文的标点符号。 b) 注释中,应标明对象的完整的名称及其用途,但应避免对代码过于详细的描述。 c) 每行注释的最大长度为100个字符。 d) 将注释与注释分隔符用一个空格分开。 e)不允许给注释加外框。 f)编码的同时书写注释。 g)重要变量必须有注释。
h)变量注释和变量在同一行,所有注释必须对齐,与变量分开至少两个空格。 如:
string title; 模块(类)注释
模块开始必须以以下形式书写模块注释: 类属性注释
在类的属性必须以以下格式编写属性注释: 方法注释
在类的方法声明前必须以以下格式编写注释 代码间注释
代码间注释分为单行注释和多行注释:
单行注释:
命名总体规则
➢ 名字应该能够标识事物的特性,是有意义的,描述性的词语。能够一眼看出它作什么。
别使用会引起误解的名字。如果名字一目了然,就无需用文档来解释方法的功能了。 ➢ 名字尽量使用英文单词。
➢ 名字尽量不使用缩写,除非它是众所周知的。
➢ 名字可以有两个或三个单词组成,但不应多于三个,控制在3至30个字母以内。
➢ 在名字中,多个单词用大写第一个字母(其它字母小写)来分隔。例如:IsSuperUser。 ➢ 名字尽量使用前缀而不是后缀。
➢ 名字中的单词尽量使用名词,如有动词,也尽量放在后面。例如:FunctionUserDelete
(而不是FunctionDeleteUser)。 在具体任务开发中,如果有特定的命名约定,则在相应的软件开发计划中予以明确定义及上报。
5. 命名规范
具体可参考微软命名规范
. 命名规范样式的分类
名称 Pascal规则 Camel规则 Upper规则 标识符 解释 例子 首字母和后面的每个单词的首字母都大写;其他字母小写 HelloWorld 首字母小写,而后面的每个单词的首字母大写;其他字母小写 所有字母都大写,中间用下划线分隔 命名格式 例子 public int helloWorld PI 备注 标识符、参数、局部变量 Camel规则 GetTypeID(string typeName) { int typeID; … } Private、Protected的实例字段 界面控件 缩写 Camel规则 Camel规则 Upper规则 private string redValue; protected bool isOk; private Label lblAlarm; namespace { … } 缩写必须是被普遍接受、众所周知的缩写 除上面的标识符外(包括但不Pascal规则 限于:类名、方法名、命名空间) { … } . 命名原则 a) 有意义的,描述性的词语来命名。能够一眼看出它作什么。别使用会引起误解的名字。如果名字一目了然,就无需用文档来解释方法的功能了。
b) 名字尽量不使用缩写,除非它是众所周知的。 c) 名字尽量使用英文单词,特殊情况下才使用拼音。
d). 除用于循环,别使用单个字母的变量象i, n, x 等. 而要使用 index, temp等。 for ( int i = 0; i < count; i ){ ...} e) 类命名规则
类名应该为名词及名词短语,尽可能使用完整的词. 使用Pascal规则。
不要使用类前缀 - 。不要使用下划线字符 (_)。不要使用任何类前缀(比如C)。 有时候需要提供以字母 I 开始的类名称,虽然该类不是接口。只要 I 是作为类名称组成部分的整个单词的第一个字母,这便是适当的。例如,类名称 IdentityStore 就是适当的。
在适当的地方,使用复合单词命名派生的类。派生类名称的第二个部分应当是基类的名称。
例如,ApplicationException 对于从名为 Exception 的类派生的类是适当的名称,原因是 ApplicationException 是一种 Exception。请在应用该规则时进行合理的判断。
例如,Button 对于从 Control 派生的类是适当的名称。尽管按钮是一种控件,但是将 Control 作为类名称的一部分将使名称不必要地加长。
public class FileStream { }
f) 接口命名规则
接口名称应该为名词及名词短语或者描述其行为的形容词,尽可能使用完整的词. (Example: IComponent or IEnumberable) 使用Pascal规则。
使用字符I为前缀,并紧跟一个大写字母(即接口名的第一个字母大写) public interface IComponent { } g) 枚举命名规则
对于 Enum 类型和值名称使用 Pascal规则。 少用缩写。
不要在 Enum 类型名称上使用 Enum 后缀。 public enum FileMode {
Create, CreateNew, Open,
OpenOrCreate, Truncate }
h) 静态常量使用名词及名词短语命名规则
使用Upper规则(全部大写,中间用下划线分隔) int PI =
i) 参数及非常量变量命名举例
使用描述性的命名,名称应该明确表达参数的意义及类型,优先满足参数的意义描述 使用 Camel 规则
不要对字段名或静态字段名应用前缀。具体说来,不要对字段名称应用前缀来区分静态和非静态字段。例如,应用 g_ 或 s_ 前缀是不正确的。
j) Web UI类的变量命名可以通过特定的规则加入前缀 Type GetType (string typeName) 使用Pascal规则
k) 对方法名采用一致的动词/宾语或宾语/动词顺序。
例如,将动词置于前面时,所使用的名称诸如 InsertWidget 和 InsertSprocket;将宾语置于前面时,所使用的名称诸如 WidgetInsert 和 SprocketInsert。
推荐名称应该为动词或动词短语.例如Save,SaveCustomer,而不要使用CustomerSave 。
不要在方法中重复类的名称。例如,如果某个类已命名为 Book,则不要将某个方法称为 ,而可以将方法命名为 。
l) 属性命名规则
名称应该为名词及名词短语 使用Pascal规则
对于bool型属性或者变量使用Is(is)作为前缀,不要使用Flag后缀,例如应该使用IsDeleted,而不要使用DeleteFlag
public enum Color {...} m) 集合命名规则
名称应该为名词及名词短语 使用Pascal规则
名称后面追加“Collection” n) 事件命名规则
event handlers命名使用 EventHandler 后缀. 两个参数分别使用 sender 及 e 使用Pascal规则
事件参数使用EventArgs 后缀
事件命名使用语法时态反映其激发的状态,例如 Changed,Changing. 考虑使用动词命名.
public delegate void MouseEventHandler(object sender, MouseEvent e); public class MouseEventArgs : EventArgs {
int x; int y;
public MouseEventArgs(int x, int y) {
= x; = y; }
public int X {
get { return x; }
}
public int Y {
get { return y; } } }
6. 编码规则
. 错误检查规则
a) 编程中要考虑方法的各种执行情况,尽可能处理所有流程情况。 b) 检查所有的系统调用的错误信息,除非要忽略错误。
c) 将方法分两类:一类为与屏幕的显示无关, 另一类与屏幕的显示有关。对于与屏幕显示无关的方法,方法通过返回值来报告错误。对于与屏幕显示有关的方法,方法要负责向用户发出警告,并进行错误处理。
d) 错误处理代码一般放在方法末尾。
e) 对于通用的错误处理,可建立通用的错误处理方法,处理常见的通用的错误。 . 大括号规则
将大括号放置在关键词下方的同列处,例如: if (条件表达式)while (条件表达式) { {
... ... } }
. 缩进规则
使用一个两个空格为每层次缩进。例如:
void func() {
if (false) {
if (true) {
while (false) { } } } }
小括号规则
a) 不要把小括号和关键词(if 、while等)紧贴在一起,要用空格隔开它们。 b) 不要把小括号和方法名紧贴在一起。
c) 除非必要,不要在Return返回语句中使用小括号。因为关键字不是方法,如果小括号紧贴着方法名和关键字,二者很容易被看成是一体的。
if else规则
如果你有用到else if 语句的话,通常最好有一个else块以用于处理未处理到的其他情况。可以的话放一个记录信息注释在else处,即使在else没有任何的动作。其格式为:
if (条件1) .
Case规则
default case总应该存在,如果不允许到达,则应该保证:若到达了就会触发一个错误。Case的选择条件最好使用int或string类型。
对齐规则
变量的申明和初始化都应对齐。例如: int m_iCount; int i,j;
float m_fIncome,m_fPay; m_iCount = 0; i = 1;
m_fIncome = ; 单语句规则
除非这些语句有很密切的联系,否则每行只写一个语句。 单一功能规则
原则上,一个程序单元(方法)只完成一项功能。 简单功能规则
原则上,一个程序单元的代码应该在一页内(25~30行)。 赋值规则
嵌入式赋值不利于理解程序,同时可能回造成意想不到的副作用,应尽量编写的赋值语句。例如:使用“a = b + c ; e = a + d;”而不用“e = ( a = b + c ) + d ”。
定义常量规则
对于代码中引用的常量(尤其是数字),应该申明一个const常量,在代码中引用名字而不直接引用值。
模块化规则
某一功能,如果重复实现一遍以上,即应考虑模块化,将它写成通用方法。并向小组成员发布。同时要尽可能利用其它人的现成模块。
交流规则
共享别人的工作成果,向别人提供自己的工作成果。 在具体任务开发中,如果有其它的编码规则,则在相应的软件开发计划中予以明确定义。
当一个页面完成时,建议点击 (或按Ctrl+E,D)重新编
排文档。(备注:这适用于大部分文档类型,如html页面、cs页面、样式表等)
建议当一个类页面完成时,应点击右键,选择“组织 using”,点击“移除未使用的 using”。
编写代码时如要将数据类型转换,建议使用系统自定义的数据转换类进行相关转换,以免发生异常。 7. 编程准则
变量使用
a)一个变量只能有一个用途;变量的用途必须和变量的名称保持一致。 b)变量定义就近原则。 数据库操作
a) 查找数据库表或视图时,建议只取出确实需要的那些字段,尽量避免使用*。 b) 使用无关联子查询,而不要使用关联子查询。
c) 清楚明白地使用列名,而不能使用列的序号。 d) 用事务保证数据的完整性。
e) 在Sql语句中使用除法时,为避免遇到以零作除数错误,建议除数写法为NULLIF(除数,0)。 对象使用
a) 尽可能晚地创建对象,并且尽可能早地释放它。 . 模块设计原则。
a) 不允许随意定义公用的方法和类。
b) 方法功能单一,不允许一个方法实现两个及两个以上的功能。
c) 尽量不要在方法内部使用全局变量,如要使用全局变量,应转化为参数带入。 d) 方法与方法之间只允许存在包含关系,而不允许存在交叉关系。即两者之间只存在单方向的调用与被调用,不存在双向的调用与被调用。
e) 模块与模块之间尽量为松耦合。 结构化要求
a) 禁止出现两条等价的支路。
例如:
void func() {
if (a == 2) { }
使用region提高代码的可读性。
比如:
#region 描述区域所实现的功能
代码包规范
本项目中,每个任务在完成一个稳定的版本后,都应打包并且归档。 代码包的版本号
项目中,代码包的版本号由圆点隔开的两个数字组成,第一个数字表示发行号,第二个数字表示该版的修改号。具体用法如下:
1) 当代码包初版时,版本号为 ;
2) 当代码包被局部修改或bug修正时,发行号不变,修改号第二个数字增1。例如,对初版代码包作了第一次修订,则版本号为 ;
3) 当代码包在原有的基础上增加部分功能,发行号不变,修改号第一个数字增1,例如,对版的基础上增加部分功能,则新版本号为 ;
4) 当代码包有重要修改或局部修订累积较多导致代码包发生全局变化时,发行号增1。例如,在 版的基础上作了一次全面修改,则新版本号为 。
代码包的标识
本项目所产生的代码包都有唯一、特定的编码,其构成如下: S-项目标识-代码包类型-版本号/序号 其中:
1) S:本项目的标识,表明本项目是“XXXX”。
2) 项目标识:简要标识本项目,此标识适用于整个项目的文档。 3) 代码包类型:取自以下表的两位字母编码。 4) 版本号:本代码包的版本号。
5) 序号:四位数字编码,指明该代码包在项目代码库的总序号。
例如:
一个Windows下RAR源码的压缩代码包命名为: 0001 项目的代码包分类表 类 型 源码文件 RAR包 (Windows) 件 编译文件 安装文件 源码代码 + 安装文编 码 WS WB WI WA 注 释 源代码文件包 编译文件包 安装文件包 源代码和安装文件包 项目中所有代码包的标识清单将在《项目开发计划》中予以具体定义。 9. 源代码的管理
. 代码库/目录的建立
项目负责人在VSS中建立项目的文档库目录,即为“OldVersion”目录,以便快速查询。 . 代码归档
所有代码在完成一个稳定的版本后,项目负责人都应打包后,存放于VSS中该项目的“OldVersion”目录下,并且依据代码包的命名规范为代码包分配一个唯一名称。并在VSS中将项目打上版本标签,以便以后获取。
. 每天下班前要尽量把文件签入。
. 签出项目文件或解决方案时尽快签入,以免其他人员无法签出。 . 建议每天上班后立即获取最新版本,重新生成一次。 . 禁止将未编译通过的代码签入。
. 建议签入文件时填写注释,简要说明本次修改的内容。 10. 输入控制校验规则
数据录入控制 a) TextBox输入
1、要保持用户输入和数据库接收的长度一致 2、必须用系统自定义的过滤方法进行非法字符过滤,特殊格式要进行输入合法性校验。 如:E_mail格式 ... 电话格式
邮政编码是六位 11. 数据库开发规则
. 数据表表名使用Pascal规则,尽量不使用下划线,字段名称也使用Pascal规则。 . 必须建立数据库字典,字典中每张数据表都必须取一个相应中文名称,名称必须是唯一的,表中字段要取相应的中文名称,要有相应的中文注释来说明用途和规则。
. 在Sql语句中使用除法时,为避免遇到以零作除数错误,建议除数写法为NULLIF(除数,0)。
. 在编写视图时要用列名,禁止使用*。(如:要用Select ID,OrderId From Order,而不能用Select * From Order)。
. 查找数据库表或视图时,建议只取出确实需要的那些字段,尽量避免使用*。 . 使用无关联子查询,而不要使用关联子查询。 . 用事务保证数据的完整性。 附录1:服务器控件名缩写表 a、web控件
、html控件web控件名 缩写 AdRotator art Button btn Calendar cal CheckBox cb CheckBoxList cbl CompareValidator cpv CustomValidator ctv DataGrid dg DataList dl DropDownList ddl HyperLink hl Image img ImageButton ibtn Label lbl LinkButton lbtn ListBox lb Panel pl PlaceHolder ph RadioButton rb RadioButtonList rbl RangeValidator rv RegularExpressionValidator rev Repeater rpt RequiredFieldValidator rfv Table tbl TableCell tcl TableRow tr TextBox txt ValidationSummary vs XML xml html控件名 缩写 HtmlAnchor hah HtmlButton hbtn HtmlForm hfrm HtmlGenericControl hgc HtmlImage himg HtmlInputButton(按钮) htxt HtmlInputButton(重置) hrbtn HtmlInputButton(提交) hsbtn b
HtmlInputCheckBox HtmlInputFile HtmlInputHidden HtmlInputImage HtmlInputRadioButton HtmlInputText(密码) HtmlInputText(文本) HtmlSelect HtmlTable HtmlTableCell HtmlTableRow HtmlTextArea
hicb hfile hhdn hiimg hrb hpwd htxt hslt htab htcl htr htxta
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- zrrp.cn 版权所有 赣ICP备2024042808号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务