必须同其关闭标记同时出现。
如
……….….
…..*不得出现交叉包含的语句,如:
…..
2.1.3标记的属性赋值规范
对于接受属性的标记,属性值必须使用双引号或者单引号包围。
如:
注意:
必须确保属性的赋值无警告或错误。
2.1.4标记的缩进规范
*最高一级的父标记采用左对齐顶格方式书写。
*下一级标记采用左对齐向右缩进一个Tab的方式书写
在下一级依此类推,分别左对齐相对于父标记向右缩进一个Tab的方式书写
*同一级标记的首字符上下必须对齐。
注意:
在进行代码缩进时,可使用VS2005及其以上版本的开发环境中的自动缩进功能。
2.2客户端JavaScript规范
2.2.1变量命名规范
*常量以及全局变量名必须全部使用大写字母
*变量名首字母必须小写
*变量名必须使用其类型的所写字符串开始。
各种类型的所写字符串如下:
*整型变量:
int
*长整型变量:
lng
*浮点型变量:
flt
*双精度变量:
dbl
*对象引用变量:
obj
*字符串变量:
str
*Date类型变量:
dtm
*变量名必须采用有意义的单词命名,如:
strUserName、lngArrayIndex
*变量名除首字母小写外,其他单词首字符必须大写
*如果变量名过长可以使用单词缩写,除了被广泛了解的单词缩写以外,所有使用单词所写的变量名必须在定义时给出注释,如:
varstrAdName//用于表示Administrator帐户的名称
varstrAdminName//不用给出注释,Admin被广泛了解
2.2.2变量使用规范
*变量使用前必须定义。
没有定义的变量禁止使用
*变量的使用尽量缩小到小的作用域。
如循环使用
for(varI=0;I<12;I++){
}
而不是:
varI;
for(I=0;I<12,I++){
}
2.2.3对象命名规范
各种页面对象如text输入框、按钮、下拉选择框在命名时必须使用以下对应前缀:
*text输入框:
txt
*button按钮:
btn
*select下拉选择框:
sel
*option项:
opt
*form表单:
frm
*frame框架:
fra
*hidden表单项:
hdn
*div标记:
div
*span标记:
spn
*对话框对象:
dlg
*窗口对象:
wnd
2.2.4函数以及子过程命名规范
*函数命名必须使用动词+名词对的方式,并且能够体现函数的功能
*函数命名的动词前缀必须是同函数功能相关的完整动词
*函数命名第一个单词的首字母小写,后面每一个单词的首字母大写
如:
GetUserName,CreateNewUser,UpdateUserInfos
2.3文件夹及文件命名规范
文件夹命名一般采用英文,长度一般不超过20个字符,命名采用小写字母。
除特殊情况才使用中文拼音,一些常见的文件夹命名如:
images(存放图形文件),flash(存放Flash文件),style(存放CSS文件),scripts(存放Javascript脚本),inc(存放include文件),link(存放友情链接),media(存放多媒体文件)等。
文件命名统一用小写的英文字母、数字和下划线的组合。
命名原则的指导思想一是使得你自己和工作组的每一个成员能够方便的理解每一个文件的意义,二是当我们在文件夹中使用“按名称排例”的命令时,同一种大类的文件能够排列在一起,以便我们查找、修改、替换、计算负载量等等操作。
2.3.1图片的命名原则
格式:
名称分为头尾两部分,用下划线隔开,头部分表示此图片的大类性质,例如广告、标志、菜单、按钮等等。
说明:
✧放置在页面顶部的广告、装饰图案等长方形的图片取名:
banner
✧标志性的图片取名为:
logo
✧在页面上位置不固定并且带有链接的小图片我们取名为button
✧在页面上位置固定并且不带有链接的背景图片我们取名为backimg
✧在页面上某一个位置连续出现,性质相同的链接栏目的图片我们取名:
menu
✧装饰用的照片我们取名:
pic
✧不带链接表示标题的图片我们取名:
title
范例:
banner_sohu.gif、banner_sina.gif、menu_aboutus.gif、menu_job.gif、title_news.gif、logo_police.gif、logo_national.gif、pic_people.jpg、backimg_notes。
2.4Request、Session、Application使用规范
*所有需要放入Session、Application中的对象,必须采用有意义的英文名字。
除了被广泛了解的单词缩写以外,不得采用单词缩写。
如:
Session(“cp”)=strCurrentUserIP‘不允许
Session(“CurrentUserIP”)=strCurrentUserIP
Session(“Pwd”)=strPwd‘允许,Pwd被广泛了解为密码
*所有需要在代码内用到的Request、Session、Application中的元素,必须在代码头部赋值给代码内声明的变量。
*如果获得Form中提交的内容,必须使用Request.Form(“itemName”).
*如果获得QueryString中提交的内容,必须使用Request.QueryString(“itemName”)
*不得在代码中出现Request(“。
。
。
”)这样的引用方式
3代码排版
排版格式虽然不会影响程序的功能,但会影响可读性。
程序排版应追求清晰、美观,这是程序风格的重要构成因素。
3.1引用
using语句写在文件说明之后,类定义之前。
/********************************************************************************
**作者:
赵保龙
**创始时间:
2010-5-25
**修改人:
**修改时间:
**修改人:
**修改时间:
**描述:
**修改密码命令
**ProductName:
SUNWAYLANDDWJC
**Copyright(c)2010,SUNWAYLAND
*********************************************************************************/
usingSystem;
usingSystem.Windows.Forms;
usingSmarTeam.Std.Interop.SmarTeam.SmApplic;
namespaceCAXAV5.MPM.Base
{
///
///修改密码命令。
///
publicclassChangePassWordCommand:
AbstractCommand
{
}
}
3.2代码行、格式与修饰符
●一行代码只做一件事情,即一行只写一条语句或者只定义一个变量。
●if、while、for、default、do、switch、case等语句自占一行,执行语句不能紧跟其后。
●if/for即使只有一个执行语句,也要使用{},单个返回语句可以不使用{}。
●变量的定义和初始化要集中,一般在文件的开头定义变量,在构造函数或加载函数里进行初始化。
局部变量的定义要在哪使用就在哪定义。
●代码格式化,使用Ctrl+K,D自动格式化代码,保证可读性。
●代码分区,一个代码文件可以包含多个类,每个类内按照字段、属性、构造函数、函数进行分区使用Region包起来。
如:
●每个类、变量、属性、函数前必须写明作用域修饰符
●空行,每两个函数之间空且只空一行
●代码瘦身,在代码设计时考虑周全尽量精简代码。
3.3长行拆分
●代码行最大长度不许超过80个字符,超过80个字符必须拆分。
●长表达式要在低优先级操作符处拆分,操作符放在新行之后。
●长字符串拆分不允许截断一个完整的字符串,同时要在(如果有的话)“,”之后拆分。
3.4This关键字
●访问变量或调用函数时能使用this.前缀的必须使用,如果不用直接写一个标识符都不知道是普通标识符还是静态标识符了
●访问窗体控件时必须使用this.前缀,这样也可以借助VS的自动提示提高工作效率。
4注释规范
4.1文件的版权与版本的声明
在代码文件的头部进行注释,标注出创始人、创始时间、修改人、修改时间、代码的功能,这在团队开发中必不可少,它们可以使后来维护/修改的同伴在遇到问题时,在第一时间知道他应该向谁去寻求帮助,并且知道这个文件经历了多少次迭代、经历了多少个程序员的手。
推荐结构如下:
/********************************************************************************
**作者:
赵保龙
**创始时间:
2010-05-25
**修改人:
赵保龙
**修改时间:
2010-05-25
**修改人:
赵保龙
**修改时间:
2010-05-25
**描述:
**主要用于产品信息的资料录入,…
**产品名称:
DWJCV1
**版权所有2005北京三维力控电气有限公司
*********************************************************************************/
可以通过修改VS的代码模板达到新建文件时自动添加上述信息,模板修改方法见:
附录1:
修改文件模板
4.2函数、属性、类等注释
类、公有属性、公有函数以及公有变量等必须使用///注释,私有字段推荐使用//注释,在函数注释中需要特定参数或返回值格式的要写出示例。
当注释超过8行时,使用Region将注释包起来。
例如:
推荐在每个函数的注释外面都包一层Region,便于开发时代码查看。
4.3逻辑点注释
在我们认为逻辑性较强的地方加入注释,说明这段程序的逻辑是怎样的,以方便我们自己后来的理解以及其他人的理解,并且这样还可以在一定程度上排除BUG。
在注释中写明逻辑思想,对照程序,判断程序是否符合设计的初衷。
推荐在涉及业务处理的逻辑点处输出跟踪信息,以便于调试程序排除运行时问题。
推荐同时使用Trace输出跟踪信息。
5命名规范
5.1Pascal、Camel及自定义命名约定
编程的命名方式主要有Pascal和Camel两种(Pascal:
每个单词的首字母大写,例如ProductType。
Camel:
首个单词的首字母小写,其余单词的首字母大写,例如productType)。
同时借鉴C++中的命名规范,制定如下命名规则:
标识符
大小写
示例
说明
类
Pascal
RadioDataInfo
射频数据信息对应的英文
枚举类型
Pascal
LogTypeEnum
以Enum后缀结尾
事件
Pascal
ValueChangeEvent
以Event后缀结尾
异常类
Pascal
WebException
以Exception后缀结尾
接口
Pascal
IGSMModule
总是以I前缀开始,实现类去掉I
方法
Pascal
CheckSetting
命名空间
Pascal
SYS.Service
与项目目录结构一致
属性
Pascal
WarnAffirmTime
字段
Camel
warnAffirmTime
首字母小写
静态字段
Camel
warnAffirmTime
首字母小写
参数
Camel
warnDealRecordID
局部变量
Camel
warnAffirmTime
WinFom窗体
Pascal
Form_Main
以Form_前缀开始
WinForm控件
Camel
textBox_用户名称
控件类型+下划线+业务名称(在一个项目中全用汉字或拼音或英语,不要混用)
WinForm用户控件
Pascal
UC_WarnType
以UC_前缀开始
注意:
在声明任何标识符之前必须想好名称,想不好就不要添加。
5.2命名空间
●命名空间使用按照“公司名称”+“产品名称”+“功能名称”+“模块名称”定义命名空间,如:
Sunwayland.DWJC.SYS.WcfService
●命名空间使用Pascal大小写,用点号分隔开。
●命名空间和类最好不使用同样的名字。
5.3类
●使用Pascal大小写。
●用名词或名词短语命名类,不能随便命名,推荐按照业务功能命名。
●使用全称避免缩写,除非缩写已是一种公认的约定,如URL、HTML
●基类要以Base结尾,如:
EntityBase(业务实体基类)。
●接口实现类,只继承一个接口时以去掉接口名称的前缀I来命名,继承多个接口时按照业务功能命名
●系统注意区分单例类和静态类,单例类继承单例基类,见附录3
●扩展类,基于类型的扩展在系统中非常有用,通用函数一般采用扩展类实现,见附录3
5.4接口
●命名规则和类一样,只是以字母I开头
5.5属性
●使用名词或名词短语命名属性。
●属性使用Pascal大小写
●属性使用get/set读取和设置值,get是必须写的部分。
●属性对应的字段必须为private且首字母小写。
如:
///
///串口号
///
privatestringportName;
[Browsable(true),DisplayName("端口")]
publicstringPortName
{
get{returnportName;}
}
●如果没有地方用到属性对应的字段则使用简写方式
示例:
///
///原始数据
///
publicstringOriginalData{get;set;}
5.6字段
●private、protected字段使用Camel命名方式
●public字段使用Pascal命名(不推荐,采用属性代替)
5.7事件
●对事件处理程序名称使用Event后缀。
●指定两个名为sender和e的参数。
sender参数表示引发事件的对象。
sender参数始
●终是object类型的,即使在可以使用更为特定的类型时也如此。
与事件相关联的状态封装在名为e的事件类的实例中。
对e参数类型使用适当而特定的事件类。
●用EventArgs后缀命名事件参数类。
●使用动名词(动词的“ing”形式)创建表示事件前的概念的事件名称,用过去式表示事件后。
●要在类型的事件声明上使用前缀或者后缀。
例如,使用OnClose,而不要使用Close。
●通常情况下,对于可以在派生类中重写的事件,应在类型上提供一个受保护的方法(称为OnXxx)。
此方法只应具有事件参数e,因为发送方总是类型的实例。
示例:
publicdelegatevoidMouseEventHandler(objectsender,MouseEventArgse);
参数类示例
///
///鼠标事件参数蕾
///
publicclassMouseEventArgs:
EventArgs
{
privateintx;
privateinty;
///
///构造函数
///
///
///
publicMouseEventArgs(intx,inty)
{
this.x=x;
this.y=y;
}
///
///X坐标
///
publicintX
{
get
{
returnx;
}
}
///
///Y坐标
///
publicintY
{
get
{
returny;
}
}
}
5.8方法
●使用动词或动词短语命名方法。
●使用Pascal大小写。
示例:
///
///根据配置文件初试化菜单
///
///创建人:
赵保龙
///创建日期:
2010-05-25
///
///修改人:
///修改日期:
///
///配置文件
publicvirtualvoidInitialMenu(stringsetFileName)
{
//……..
}
5.9参数
●使用描述性参数名称。
参数名称应当具有足够的描述性,以便参数的名称及其类型可用于在大多数情况下确定它的含义。
●对参数名称使用Camel大小写。
●使用描述参数的含义的名称,而不要使用描述参数的类型的名称。
开发工具将提供有关参数的类型的有意义的信息。
因此,通过描述意义,可以更好地使用参数的名称。
少用基于类型的参数名称,仅在适合使用它们的地方使用它们。
5.10常量
●所有单词大写,多个单词之间用"_"隔开。
示例
///
///MPM应用类型
///
publicconststringAPPLICATION_TYPE="3";
6数据库命名规范
6.1数据文件命名规范
命名格式:
系统所属单位+_+系统名称+_+文件类型。
如:
系统所属单位为lztc,系统名称为netshop,则数据库文件命名为lztc_netshop_database.mdf,lztc_netshop_log.log。
注意:
文件名全部采用小写。
6.2数据库表命名规范
若该数据库库中有多个系统,表命名格式:
Tab_+系统名称_+单词或多个单词。
系统名是开发系统的缩写,系统名称全部采用小写英文字符,如Tab_bbs_Title,Tab_bbs_ForumType。
若该数据库库中只含有一个系统,那么表命名格式:
Tab_+单词或多个单词。
单词选择能够概括表内容的一个或多个英文单词,如Tab_UserInfo,Tab_UserType。
关连表命名规则为Re_表A_表B。
Re是Relative的缩写,如:
Re_User_ArticleType,Re_User_FormType。
表前缀还有如,SYS、BASIC、LOG、DATA、DEV等分别表示不同的业务分类。
注意:
表名长度不能超过30个字符,表名中含有单词全部采用单数形式,单词首写字母要大写,多个单词间不用任何连接符号。
6.3数据库字段命名规范
数据库字段命名格式:
表别名+_+单词
格式说明:
字段名全部采用小写英文单词,单词之间用”_”隔开。
如:
user_name,user_pwd。
表别名规则:
如果表名是一个单词,别名就取单词的前4个字母;如果表名是两个单词,就各取两个单词的前两个字母组成4个字母长的别名;如果表的名字由3个单词组成,你不妨从头两个单词中各取一个然后从最后一个单词中再取出两个字母,结果还是组成4字母长的别名。
6.4数据库视图命名规范
视图命名格式:
View