良好的命名规范可以为团队合作开发推波助澜,无论在项目开发,还是产品维护上都起到了至关重要的作用。应该说命名规范是一种约定,也是程序员之间良好沟通的桥梁。另外古人相信只要知道一个人真正的名字就会获得凌驾于那个人之上的不可思议的力量。只要给事物想到正确的名字,它就可以带来比代码更强的力量。如果所有的命名都与其自然相适合,则关系清晰,含义可以推导得出,一般人的推想也能在意料之中。
Java中的命名规则
.NET中的命名规则
PHP中的命名规则
NoahWeb中的命名规则
网站文件命名规则
Dreamweaver文件的命名规则
VBScript中的命名规则
CSS类及id中的命名规则
数据库中的命名规则
常见命名规则有四种样式:完全大写、完全小写、Pascal 大小写和 Camel 大小写。
1 Pascal 大小写
组成标识符的每个单词的首字母大写,其余字母小写的书写约定。对于缩写的双字母单词,要求全部大写。
例如:ApplicationException
ID
2 Camel 大小写
标识符的首字母小写,每个后面连接的单词的首字母大写,其余字母小写的书写约定。对于缩写的双字母单词,要求它们出现在标识符首部时全部小写,否则全部大写。
例如:applicationException
id
3 匈牙利命名法
匈牙利命名法由匈牙利程序员发明,他在微软工作了多年,此命名法就是通过微软的各种产品和文档传出来。多数有经验的程序员,不管他们用的是哪门语言,都或多或少在使用它。
基本原则:变量名 = 属性 + 类型 + 对象描述
即一个变量名是由三部分信息组成,这样,程序员很容易理解变量的类型、用途,而且便于记忆。变量类型和首字母对照关系如下表:
数据类型/对象类型 / 变量前缀 / 备注
byte bye
char chr
float flt
boolean bln 做布尔变量时,使用bln
Integer/int int
String str
Single sng
short sht
Long/long lng
Double/double dbl
Currency cur
Variant bln astr obj vnt 做布尔变量用时,用bln,做字符串数组用时,用astr,做为对象使用时,用obj,不确定时,用vnt。
对于数组,在数据类型的前缀前再增加一个a,例如字符串数组为astr。对于在多个函数内都要使用的全局变量,在前面再增加“g_”。例如一个全局的字符串变量:g_strUserInfo。
Java中的命名规则
在面向对象编程中,对于类,对象,方法,变量等方面的命名是非常有技巧的。比如,大小写的区分,使用不同字母开头等等。但究其本,追其源,在为一个资源定名称的时候,应该本着描述性以及唯一性这两大特征来命名,才能保证资源之间不冲突,并且每一个都便于记忆。
包的命名
Java包的名字都是由小写单词组成。但是由于Java面向对象编程的特性,每一名Java程序员都可以编写属于自己的Java包,为了保障每个Java包命名的唯一性,在最新的Java编程规范中,要求程序员在自己定义的包的名称之前加上唯一的前缀。由于互联网上的域名称是不会重复的,所以程序员一般采用自己在互联网上的域名称作为自己程序包的唯一前缀。
例如:net.frontfree.javagroup
类的命名
类的名字必须由大写字母开头而单词中的其他字母均为小写;如果类名称由多个单词组成,则每个单词的首字母均应为大写例如TestPage;如果类名称中包含单词缩写,则这个所写词的每个字母均应大写,如:XMLExample,还有一点命名技巧就是由于类是设计用来代表对象的,所以在命名类时应尽量选择名词。
例如:Circle
属性、方法的命名
方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头。
例如:sendMessge
常量的命名
常量的名字应该都使用大写字母,并且指出该常量完整含义。如果一个常量名称由多个单词组成,则应该用下划线来分割这些单词。
例如:MAX_VALUE
参数的命名
参数的命名规范和方法的命名规范相同,而且为了避免阅读程序时造成迷惑,请在尽量保证参数名称为一个单词的情况下使参数的命名尽可能明确。
接口的命名
接口名称都加上前缀“I”。
接口名称在前缀之后的部分命名规则与类相同。
根据接口类型可以在之后加上业务类型的头等。
例如:
IRunnable
ISingleton
变量的命名
总的来说,变量的命名与属性相似。
循环计数器
一般使用i、j和k来命名。例外(Exception)
一般可以使用e,ex等来命名。布尔变量(boolean)
可以使用bool***,***为有意义的英文单词或单词组合,如boolHaveRecord:是否有记录。数组的定义
要用"int[] packets",而不是"int packets[]"
List变量
可采取如下规则的命名规则,***List;
***为有意义的英文单词或单词组合,如dayList;
二维数组变量
可采取如下规则的命名规则,***Arr;
***为有意义的英文单词或单词组合,如lmtTypeArr;
某一数组或set的长度的命名
变量名称+Size如
packetsSize
常见分层及类名
action[控制层]:UserAction.java
model[数据模型层]:UserInfo.java
service[业务逻辑接口层]:IUserService.java
service.impl[业务逻辑实现层]:UserServiceImpl.java
service.dto[数据传输对象]:UserDTO.java
service.assembler[模型转换]:UserAssembler.java
dao[数据访问接口层]:IUserDao.java
dao.impl[数据访问实现层]:UserDaoImpl.java
api[API接口层]:IUserServiceApi.java
api.impl[API实现层]:UserServiceApiImpl.java
common[公共层]:***.java
Javadoc注释
Java除了可以采用我们常见的注释方式之外,Java语言规范还定义了一种特殊的注释,也就是我们所说的Javadoc注释,它是用来记录我们代码中的API的。Javadoc注释是一种多行注释,以/**开头,而以*/结束,注释可以包含一些HTML标记符和专门的关键词。使用Javadoc注释的好处是编写的注释可以被自动转为在线文档,省去了单独编写程序文档的麻烦。
例如:/**
* This is an example of
* Javadoc
*
* @author darchon
* @version 0.1, 10/11/2002
*/在每个程序的最开始部分,一般都用Javadoc注释对程序的总体描述以及版权信息,之后在主程序中可以为每个类、接口、方法、字段添加Javadoc注释,每个注释的开头部分先用一句话概括该类、接口、方法、字段所完成的功能,这句话应单独占据一行以突出其概括作用,在这句话后面可以跟随更加详细的描述段落。在描述性段落之后还可以跟随一些以Javadoc注释标签开头的特殊段落,例如上面例子中的@auther和@version,这些段落将在生成文档中以特定方式显示。
虽然为一个设计低劣的程序添加注释不会使其变成好的程序,但是如果按照编程规范编写程序并且为程序添加良好的注释却可以帮助你编写出设计完美,运行效率高且易于理解的程序,尤其是在多人合作完成同一项目时编程规范就变得更加重要。俗话说“磨刀不误砍柴工”,花费一点时间去适应一下Java编程规范是有好处的。
.NET中的命名规则
名称空间的命名
命名名称空间的一般规则如下:
CompanyName.TechnologyName
这样,我们看到的名称空间应该是这样的:
Microsoft.Office
PowerSoft.PowerBuilder注意:这只是一个原则。第三方公司可以选择其它的名字。
避免用公司名称或其它著名品牌的名称作为名称空间的前缀,这样会造成两个公布的名称空间有同一个名称的可能性。
例如:将微软提供的Office自动类命名为Microsoft.Office使用Pascal大写方式,用逗号分隔逻辑成分。
例如:Microsoft.Office.PowerPoint如果你的品牌使用的是非传统大写方式,那么一定要遵循你的品牌所确定使用的大写方式,即使这种方式背离了通常的名称空间大写规则。
例如:NeXT.WebObjects
ee.cummings
类和类成分的命名
类的命名原则是用名词或名词短语命名类,使用Pascal大写。减少类名中缩写的使用量。不要使用任何类前缀(比如C),不要使用带下划线的字符。
例如:public class FileStream {}
public class Button {}
public class String {}
变量的命名
采用Camel 大小写命名,名称中首字母小写。
例如:findLastRecord
redrawMyForm
在内部范围中避免使用与外部范围中的名称相同的名称。若访问错误变量,则会产生错误结果。若变量与同一名称的关键字冲突,则必须在关键字前加适当的类型库以作标识。
函数和方法的命名
函数和方法的命名应该以动词开始,使用Pascal大写。不要使用带下划线的字符。
例如:InitNameArray
CloseDialog
接口命名原则
使用名词或名词短语,或者描述行为的形容词来命名接口,使用Pascal大写。 减少接口名中缩写的使用量,在接口名前加前缀I,以表示这个类型是一个接口。
例如:IComponent(描述性名词)
ICustomAttributeProvider(名词短语)
IPersistable(形容词)
参数的命名
使用描述性参数名。参数名应该具有足够的描述性,这样在大多数情况下参数名和它的种类可以用来确定它的意思。根据参数的意思来命名参数,而不是根据参数的种类来命名。我们希望开发工具可以用很方便的方式提供关于参数种类的信息,这样参数名可以得到更好的使用,可以对语义而不是对种类进行描述。但是偶尔使用根据类型命名的参数名也是完全可以的。不要使用保留参数。如果在下一个版本中需要更多的数据,可以增加进来。
例如:Type GetType (string typeName)
string Format (string format, object [ ] args)
属性的命名
用名词或名词短语命名属性,属性与类型要一样。 用与一个类型的名称相同的名字来命名属性时,就使这个属性的类型成为那个类型。虽然听起来有些奇怪,但这是正确的。
例如:public enum Color {...}
public class Control {
public Color Color {get {...} set {...}}
}
事件的命名
用EventHandloer后缀命名事件处理程序,使用名为sender和e的两个参数,Sender参数代表提出事件的对象。Sender参数永远是一个类型对象,即使它可能使用了更为特定的类型,与事件相关的状态被封装在一个名为e的事件类范例中。要使用这个类型的正确的、特定的事件类。
例如:public delegate void MouseEventHandler(object sender, MouseEvent e);
命名事件名时,需要有之前和之后的时态概念,因此要使用现在时态和过去时态(不要使用BeforeXxxAfterXxx的方式)。例如,可以被取消的结束事件就有Closing事件和Closed事件。
长项和常用项的命名
可使用缩写使名称长度适中,通常,多于 32 个字符的变量名在低分辨率的监视器上难以阅读。同时,请确保缩写在整个应用程序中保持一致。
例如:可以使用“HTML”代替“HyperText Markup Language”。
常见分层及类名
BLL[业务逻辑层]:UserController.cs
DAL[数据访问层]:UserDal.cs
Model[实体类层]:UserInfo.cs
Common[公共层]:***.cs
代码书写格式规范
-
- 文件之中不得存在无规则的空行,比如说连续十个空行。一般来讲函数与函数之间的空行为2-3行。
- 在函数体内部,在逻辑上独立的两个函数块可适当空行,一般为1-2行。
- 每行长度尽量避免超过屏幕宽度,应不超过80个字符。
- 尽量用公共过程或子程序去代替重复的功能代码段。
- 使用括号清晰地表达算术表达式和逻辑表达式的运算顺序。如将 x=a*b/c*d 写成 x=(a*b/c)*d可避免阅读者误解为x=(a*b)/(c*d)。
- 避免采用过于复杂的条件测试。
- 避免过多的循环嵌套和条件嵌套。
- 一个函数不要超过200行。一个文件应避免超过2000行。
- 避免使用goto语句。
- 避免采用多赋值语句,如x = y = z;。
代码注释规范
.cs文件的注释
所有.cs文件开头都要加上注释,写明文件创建时间、作者、用途概述等
例如://********************************************************
//新增日期:2004.7.19
//作者:XXX
//內容说明: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
//********************************************************
函数过程注释
所有的函数体开头都要加上注释,所以注释使用.NET注释规范。
例如:///
/// 构造函数
///
///示例参数1
///示例参数2
public UpgradeThread(string is_xxx1, string is_xxx2)
{
//…
}常量变量注释
所有的常量变量,无论是全局还是局部使用的,凡是对代码整体起到关键性做用的都需要加上注释。
例如:///
/// 当前线程指向的备份文件本地保存路径
///
public string StorePath = '';
代码修改注释
当开发者维护以前的程序代码时,需要在修改处的开始及结尾,加上自己的注释信息。
例如://BEGIN 2004-7-19 Jayson 修正了XXX问题
略…
//END 2004-7-19 Jayson
PHP中的命名规则
类的命名
在为类(class )命名前首先要知道它是什么。如果通过类名的提供的线索,还是想不起这个类是什么的话,那么就说明设计存在问题。
超过三个词组成的混合名是容易造成系统各个实体间的混淆,尝试使用(CRC Se- ssion card)看看该命名所对应的实体是否有着那么多的功用。
对于派生类的命名应该避免带其父类名的诱惑,一个类的名字只与它自身有关,和它的父类叫什么无关。
使用大写字母作为词的分隔,其他的字母均使用小写,名字的首字母使用大写 。不要使用下划线('_') 。
例如:class NameOneTwo
class Name
类库的命名
目前命名空间正在越来越广泛的被采用,以避免不同厂商和团体类库间的类名冲突。当尚未采用命名空间的时候,为了避免类名冲突,一般的做法是在类名前加上独特的前缀,两个字符就可以了,当然多用一些会更好。
例如:John Johnson的数据结构类库可以用Jj做为前缀,如下:
class JjLinkList
{
}
方法的命名
采用与类命名一致的规则,同样是使用英文单词诠释出方法的作用。
例如:class NameOneTwo
{
function DoIt() {};
function HandleError() {};
}
类属性的命名
属性命名应该以字符‘m’为前缀。前缀‘m’后采用于类命名一致的规则。‘m’总是在名字的开头起修饰作用,就像以‘r’开头表示引用一样。
前缀'm'防止类属性和方法名发生任何冲突。你的方法名和属性名经常会很类似,特别是存取元素。
例如:class NameOneTwo
{
function VarAbc() {};
function ErrorNumber() {};
var mVarAbc;
var mErrorNumber;
var mrName;
}
方法中参数的命名
第一个字符使用小写字母。在首字符后的所有字都按照类命名规则首字符大写。
这样做可以随时知道哪个变量对应哪个变量。另外,这样做可以使用与类名相似的名称而不至于产生重名冲突。
例如:class NameOneTwo
{
function StartYourEngines(
&$rSomeEngine,
&$rAnotherEngine);
}
变量的命名
所有字母都使用小写。使用'_'作为每个词的分界
通过这一途径,代码中变量的作用域是清晰的。所有的变量在代码中都看起来不同,容易辨认。
例如:function HandleError($errorNumber)
{
$error = OsErr();
$time_of_error = OsErr->getTimeOfError;
$error_processor = OsErr->getErrorProcessor;
}
全局变量的命名
全局变量应该带前缀‘g’。
知道一个变量的作用域是非常重要的。
例如:global $gLog;
global &$grLog;
函数的命名
函数名字采用C GNU的惯例,所有的字母使用小写字母,使用'_'分割单词。
这样可以更易于区分相关联的类名。
例如:function some_bloody_function()
{
}
NoahWeb中的命名规则
NoahWeb汲取了各种编程语言的精华,经过反复的总结,最终形成了一套独特且高效的命名规则。在命名的过程中,使用“资源名称+功能描述”的方式,保证了资源之间的唯一性,并且大大提高了资源的描述性和阅读性。
页面或动作传值命名规则
应用 | 规则 | 示范 |
传递id使用 | pointid | abc.aspx?pointid=123 |
传递name使用 | pointname | abc.aspx?pointname=xxx |
搜索关键词 | keyword | abc.aspx?keyword=xxx |
当前页索引 | page | abc.aspx?page=1 |
字符资源命名规则
应用 | 规则 | 示范 |
针对表的列表命名 | list_表名[_功能名] | list_user_view |
手写数据库操作集 | sql_[表名或功能名] | sql_user_search |
表单命名规则
应用 | 规则 | 示范 |
表单id命名 | 表名+功能 | userLogin |
输入区控件id命名 | form+对应数据库的列名 | formId;formname |
数据库操作命名规则
应用 | 规则 | 示范 |
查询 | 表名_S_条件+功能说明 | user_S_ById |
user_S_ByName | ||
user_S_Pagelist | ||
user_S_ByNamePagelist | ||
user_S_ByNameSearch | ||
user_S_ByIdTopTen | ||
user_S_ByDateTopTen | ||
user_S_ByDateTopFive | ||
user_S_ByDateTopSet | ||
删除 | 表名_D_条件+功能说明 | user_D_ById |
插入 | 表名_I_+功能说明 | user_I_NewData |
更新 | 表名_U_条件+功能说明 | user_U_ByIdChangePassword |
动作命名规则
应用 | 规则 | 示范 |
动作命名 | 表名+所属功能+操作方式 (add:添加输入区显示 add_ex:添加执行 list:列表显示内容 search:搜索 viewinfo:显示详细信息 update_ex:更新执行 del: 删除执行 ) | user_manager_add |
user_manager_add_ex | ||
user_manager_list | ||
user_manager_search | ||
user_manager_viewInfo | ||
user_manager_update_ex | ||
user_manager_del |
文件上传命名规则
应用 | 规则 | 示范 |
表单文件上传区命名规则 | myfile+编号 | myfile1 |
myfile2 | ||
myfile3 |
cookie命名规则
应用 | 规则 | 示范 |
变量名命名 | cookie+变量名 | cookieusername |
网站文件命名规则
关于文件的命名,看似无足重轻,但实际上如果没有良好的命名规则进行必要的约束,一味的乱起名称,最终导致的结果就是整个网站或是文件夹无法管理。所以,命名规则在这里同样非常重要。 需要特别注意的时候,网站文件或文件夹命名请尽量避免使用中文字符命名。
文件的命名
以最少的字母达到最容易理解的意义。
索引文件统一使用index.html文件名(小写) index.html文件统一作为"桥页",不制作具体内容,仅仅作为跳转页和meta标签页。主内容页为main.html。
按菜单名的英语翻译取单一单词为名称。所有单英文单词文件名都必须为小写,所有组合英文单词文件名第二个起第一个字母大写; 所有文件名字母间连线都为下划线。
例如:关于我们 aboutus
信息反馈 feedback
产 品 product
图片的命名
以图片英语字母为名。以最少的字母达到最容易理解的意义。
对于较小的图片,我们使用如下格式的命名 :
sm.kahn.gif
其中,sm 代表“small”,kahn 代表图片的内容。较大图像的命名规则也一样,不过是以 bg 开头的:
bg.kahn.gif
用以区分不同图像的命名规则应当是全站通用的,这样可以尽量避免将不同的名称搅混。
网站目录的命名
目录建立的原则是以最少的层次提供最清晰简便的访问结构。
服务器的ftp上传目录默认为html 根目录文件 根目录只允许存放index.html和main.html文件,以及其他必须的系统文件。
每个语言版本存放于独立的目录。已有版本语言设置为: 简体中文 gb 繁体中文 big5 英 语 en 日 语 jp 每个主要功能(主菜单)建立一个相应的独立目录。 根目录下的images为存放公用图片目录,每个目录下私有图片存放于各自独立images目录.
例如:menu1images
menu2images
另外,所有的js文件存放在根目录下统一目录script 所有的CSS文件存放在根目录下的style目录 所有的CGI程序存放在根目录并列目录cgi_bin目录。
对于一些信息更新量比较大的站点或是栏目,还可以采用一种更为特殊的方式来进行文件架的命名,这样能使得日后的维护更加方便,这样的方式就是使用“单一单词命名的目录”+“年年年年_月月_日日”的方式命名,最后的“日日”是根据更新量大小可选择的,如果每日更新量很大则可以加上“日日”。
例如:news2005_08
news2005_09
news2005_10_12
Dreamweaver文件的命名规则
在Dreamweaver中用户可以对一系列不同类型的对象进行命名,这些对象包括图片、层、表单、文件、数据库域等,这些对象将会被许多不同的工作引擎进行分析处理,这些工具包括各种浏览器、JavaScript脚本解析器、网络服务器、应用程序服务器、查询语言等等。
如果某个对象的名称无法被某个解析器识别,就有可能会导致故障的发生,更加麻烦的是用户可能很难发现问题的原因,例如某个具体的特效无法正确显示,或者是在某个特殊阶段无法正确显示,有时故障可能只会在某种特殊情况或在使用某个浏览器时发生,而在其它情况下保持正常,用户将很难分析出故障是由于命名问题而导致的。
由于需要命名的对象的种类很多,对这些对象进行解析的引擎工具也很多,因此用户在给这些对象命名时应该遵循一个常规的标准,以确保普遍兼容性。命名的基本原则就是:使用独一无二的、小写、不带空格的名称,名称应由字母和数字组成,并以字母开始,名称中可以包含"_"符号。
独一无二
请确保某对象的名称与其它对象不同,保证其独一无二的属性。
例如:你可以将某对象命名为"feedback_button_3"
小写
有些服务器和脚本解析器对文件名的大小写也进行检查,而为了避免因大小写引起的不兼容问题,建议用户在命名时全部使用小写文件名。
不带空格
不同的解析器对空格等符号的解析结果不同,例如某些解析器会把空格视为某个十六进制的数值,因此建议用户使用不带空格的单词做为文件对象的名称。
词数混合
用户在命名中可以随意使用26个罗马字母以及10个阿拉伯数字,而不建议使用其它标点符号。
以字母开始
有些解析器不喜欢以数字开头的文件名。
例如:在某些浏览器中的JavaScript脚本内部,如果使用"alpha23"这样的名称就不会出现问题,而如果使用"23alpha"这样的名称就可能会发生故障。
可包含"_"符号
为了使某个对象的文件名独一无二,用户可以通过使用"_"符号来更加详细地描述文件名。
例如:某对象的文件名可以是"jd_background_17"。
除了上述原则标准之外,我们还需要注意一些其它情况,如文件名与系统的冲突。某些文件名可能满足上述标准,但可能还会导致故障的发生,原因是因为它们与系统产生了冲突。
例如:当在使用JavaScript脚本函数时,不建议用户将某个变量命名为"for",因为"for"在本系统下是一个工作语言字串,使用其命名某个变量可能会导致解析器工作出错。许多程序都有一些保留名称,这些名称一般不建议用户使用。
例如:用户使用某个SQL程序保留的名称来命名某个数据库域,SQL对其进行分析时就可能会报错。
此外,用户在将不同来源的代码编到一起时,应该注意文件名的冲突情况。
例如:用户把来自不同资源的两个JavaScript行为代码编至同一网页内,而这两个行为代码的变量名相同,这时就有可能出现问题。
因此做为查询故障的一个技巧,在出现故障时,用户可以查询一下相同网页中是否存在相同文件名的变量名称。
VBScript中的命名规则
常数命名规则
VBScript 的早期版本不允许创建用户自定义常数。如果要使用常数,则常数以变量的方式实现,且全部字母大写以和其他变量区分。常数名中的多个单词用下划线 (_) 分隔。
例如: USER_LIST_MAX 、NEW_LINE这种标识常数的方法依旧可行,但您还可以选择其他方案,用 Const 语句创建真正的常数。这个约定使用大小写混合的格式,并以con”作为常数名的前缀。
例如: conYourOwnConstant
变量命名规则
出于易读和一致性的目的,请在 VBScript 代码中使用以下变量命名约定:
子类型 前缀 示例 Boolean bln blnFound Byte byt bytRasterData Date (Time) dtm dtmStart Double dbl dblTolerance Error err errOrderNum Integer int intQuantity Long lng lngDistance Object obj objCurrent Single sng sngAverage String str strFirstName 变量作用域命名规则
变量应定义在尽量小的作用域中。VBScript 变量的作用域如下所示:
作用域 声明变量处 可见性 过程级 事件、函数或子过程 在声明变量的过程中可见 Script 级 HTML页面的HEAD部分,任何过程之外 在脚本的所有过程中可见 变量作用域前缀命名规则
随着脚本代码长度的增加,有必要快速区分变量的作用域。在类型前缀前面添加一个单字符前缀可以实现这一点,而不致使变量名过长。
作用域 前缀 示例 过程级 无 dblVelocity Script 级 s sblnCalcInProgress 描述性变量名和过程名的命名规则
变量名或过程名的主体应使用大小写混合格式,并且尽量完整地描述其目的。另外,过程名应以动词开始,例如 InitNameArray 或 CloseDialog。
对于经常使用的或较长的名称,推荐使用标准缩写以使名称保持在适当的长度内。通常多于 32 个字符的变量名会变得难以阅读。使用缩写时,应确保在整个脚本中保持一致。例如,在一个脚本或脚本集中随意切换 Cnt 和 Count 将造成混乱。
对象命名规则
下表列出了 VBScript 中可能用到的对象命名约定(推荐):
对象类型 前缀 示例 3D 面板 pnl pnlGroup 动画按钮 ani aniMailBox 复选框 chk chkReadOnly 组合框、下拉列表框 cbo cboEnglish 命令按钮 cmd cmdExit 公共对话框 dlg dlgFileOpen 框架 fra fraLanguage 水平滚动条 hsb hsbVolume 图像 img imgIcon 标签 lbl lblHelpMessage 直线 lin linVertical 列表框 lst lstPolicyCodes 旋钮 spn spnPages 文本框 txt txtLastName 垂直滚动条 vsb vsbRate 滑块 sld sldScale
代码注释规则
所有过程的开始部分都应有描述其功能的简要注释。这些注释并不描述细节信息(如何实现功能),这是因为细节有时要频繁更改。这样就可以避免不必要的注释维护工作以及错误的注释。细节信息由代码本身及必要的内部注释来描述。
当传递给过程的参数的用途不明显,或过程对参数的取值范围有要求时,应加以说明。如果过程改变了函数和变量的返回值(特别是通过参数引用来改变),也应在过程的开始部分描述该返回值。
过程开始部分的注释应包含以下区段标题。相关样例,请参阅后面的“格式化代码”部分。
区段标题 注释内容 目的 过程的功能(不是实现功能的方法)。 假设 其状态影响此过程的外部变量、控件或其他元素的列表。 效果 过程对每个外部变量、控件或其他元素的影响效果的列表。 输入 每个目的不明显的参数的解释。每个参数都应占据单独一行并有其内部注释。 返回 返回值的解释。 请记住以下几点:
- 每个重要的变量声明都应有内部注释,描述变量的用途。
- 应清楚地命名变量、控件和过程,仅在说明复杂细节时需要内部注释。
- 应在脚本的开始部分包含描述该脚本的概述,列举对象、过程、运算法则、对话框和其他系统从属物。有时一段描述运算法则的假码是很有用的。
格式化代码
应尽可能多地保留屏幕空间,但仍允许用代码格式反映逻辑结构和嵌套。以下为几点提示:
- 标准嵌套块应缩进 4 个空格。
- 过程的概述注释应缩进 1 个空格。
- 概述注释后的最高层语句应缩进 4 个空格,每一层嵌套块再缩进 4 个空格。例如:
'********************************************************* ' 目的: 返回指定用户在 UserList 数组中第一次出现的位置。 ' 输入: strUserList(): 所查找的用户列表。 ' strTargetUser: 要查找的用户名。 ' 返回: strTargetUser 在 strUserList 数组中第一次出现时的索引。 ' 如果目标用户未找到,返回 -1。 '*********************************************************
Function intFindUser (strUserList(), strTargetUser) Dim i ' 循环计数器。 Dim blnFound ' 发现目标的标记。 intFindUser = -1 i = 0 ' 初始化循环计数器。 Do While i <= Ubound(strUserList) and Not blnFound If strUserList(i) = strTargetUser Then blnFound = True ' 标记设为 True。 intFindUser = i ' 返回值设为循环计数器。 End If i = i + 1 ' 循环计数器加 1。 Loop End Function
CSS类及id中的命名规则
Web开发人员可以通过创建CSS类及id名称并使用这些名称来对divs以及其他的格式页面元素进行标识。对开发人员来说,在命名重新定义XHTML标记(tags)的CSS selectors时,必须保证其与预定义的标记准确匹配,但就类以及id选择器名称而言,则仁者见仁,智者见智。然而随心所欲的为这些类以及id命名则并不是个好的习惯。
直观命名
当在设计Web页面以及需要对一个div进行标识的时候,最自然的想法就是使用可以描述元素所在页面位置的词汇来对其命名。
例如:top-panel
horizontal-nav
left-side
center-column
right-col这些是CSS以及XHTML类和id的有效命名方式。这些词汇简单并且能够使人顾名思义,因此满足了标识页面元素以及相应的CSS样式的需要。
但问题是这样的名称同页面内容的特定表达方式相关联。这些命名参考了某种特定页面布局中的页面元素位置,因此在这样的布局之外使用就会显得不合适甚至造成理解混乱。这些命名没有涉及文档内容的结构。因此,下面给出了对CSS类以及ID命名更好的方法。
结构化命名
这些是CSS以及XHTML类和id的有效命名方式。这些词汇简单并且能够使人顾名思义,因此满足了标识页面元素以及相应的CSS样式的需要。 这些是CSS以及XHTML类和id的有效命名方式。这些词汇简单并且能够使人顾名思义,因此满足了标识页面元素以及相应的CSS样式的需要。有标记的相关信息都是用来描述文档的结构而不是外观。这样的特点使得我们可以通过简单的改变CSS的方式来对不同外观格式下的内容(content)以及标记(markup)进行重用。当你理解这种方式时,很容易就可以发现采用页面位置来为类以及id命名的方式在处理如音频(audio)等外观格式上显得非常不合适。因此,应当根据在文档中的使用目的而非出现位置来对类以及id进行结构化命名。
可以按照如下所示的结构化方式来对类以及id名称命名:
例如:branding
main-nav
subnav
main-content
sidebar这些名字同直观命名方式一样非常易懂,但他们描述了页面元素的作用而非位置。这使得代码更加符合使用纯粹的结构化标记(structural markup)的初衷,即开发人员可以在不改变标记的情况下对各种各样媒体下的显示格式进行处理。
即使你不打算在其他的媒体上对Web页面进行格式修改,使用结构化命名方式还可以帮助你在日后的站点升级或重新设计中更为轻松。例如,结构化命名避免了当一个div同id right-column移动到页面左边后所带来的混乱。对div sidebar的采用这样的命名方式就显得更加适当,因为无论它出现在页面的哪一边,这个名字仍然对开发人员来说直观易懂。
惯例
Andy Clarke分析了40份由推崇标准化Web设计理念的开发人员所设计的Web站点的源代码。尽管类以及id名称很不统一,但是还是发现了一些频繁出现的常用名称。这里给出了最常用类/id名称的示例列表:例如:header
content
nav
sidebar
footer
数据库中的命名规则
数据库 - 表命名
表名用T_开头,表名长度不能超过30个字符,表名中含有单词全部采用单数形式,单词首字母要大写。
多个单词间用下划线(_)进行连接。若库中有多个系统,表名采用系统名称+单词或多个单词,系统名是开发系统的缩写,如VNET。
表中含有的单词建议用完整的单词。如果导致表名长度超过30个字符,则从最后一个单词开始,依次向前采用该单词的缩写。(如果没有约定的缩写,则采用该单词前4个字母来表示)。
示例:T_Sys_User、T_User
数据库 - 字段命名
以小写f开头[注:field-字段英文],采用Camel 大小写命名字;字段长度不能超过30个字符。
示例:fUserName
注:自增主键命名为id
数据库 - 视图命名
视图名用V_开头,视图名长度不能超过30个字符。视图名用大写的英文单词来表示。
视图由几个表产生就用下划线(_)连接几个表的名,如果表过多可以将表名适当简化,取表名前3个字母如Use,但一定要列出所有表名。
示例:V_Sys_Use_Ead、V_Sys_User、V_Use_Ead
数据库 - 序列命名
序列名用seq_开头,后面跟使用该序列的字段名。
如果有几个字段用同一个序列,用下划线(_)连接几个字段的名称。
如果不同表中相同的字段名需要使用不同的序列,则在字段名后加表的特征,用下划线(_)连接。序列名长度不能超过30个字符。序列名用小写的英文单词来表示。
数据库 - 存贮过程命名
存储过程名用Pr_开头,存储过程名长度不能超过30个字符。存储过程名用小写的英文单词来表示。
数据库 - 函数命名
函数名用Fu_开头,函数名长度不能超过30个字符。函数名用小写的英文单词来表示。
数据库 - 触发器命名
触发器名用Tr_开头,触发器名长度不能超过30个字符。触发器名用小写的英文单词来表示。
数据库 - 主键命名
主键名用pk_开头,后面跟该主键所在的表名。主键名长度不能超过30个字符。如果过长,可对表名进行缩写。缩写规则同表名的缩写规则。主键名用小写的英文单词来表示。