找回密码
 入学

QQ登录

只需一步,快速开始

查看: 2582|回复: 3

ASP编程规范

[复制链接]
发表于 2006-4-12 02:15:16 | 显示全部楼层 |阅读模式
<>程序代码编写统一规范方案<br>为了规范程序代码编写,提高代码可读性,降低后期维护成本,提高办公效率,建议以后编写的程序按以下几条规范进行:<br>一、        统一VBSCRIPT和ASP程序编写规范:<br>(一)变量命名规则:<br>由于在ASP和VBSCRIPT中因为不需要声明变量,同时不能声明变量的类型,但为了提高代码的可读性,养成好的开发习惯,对于本系统开发的变量命名统一规则如下:<br>1.        使用Dim、Public、Private声明变量;<br>例如:Dim iStudentNum<br>2.        变量类型的体现:<br>a、        整型变量:以小写字母i开头,后面跟变量标示符,英文单词的第一个字母大写。<br>例如:下面声明一个存储数据库记录多少的变量<br>Dim iResordsetNumber<br>b、        单精度实体变量:以小写字母f开头,后面跟变量标示符,英文单词的第一个字母大写。<br>c、        双精度实体变量:以小写字母d开头,后面跟变量标示符,英文单词的第一个字母要大写。<br>d、        字符型变量:以小写字母s开头;<br>e、        布尔型变量:以小写字母b开头;<br>f、        数组变量:数组类型+“_”+“Array”+“_”+“变量标示符”<br>例如:定义一个存储学生成绩的数组(存储单精度实体类型变量)<br>Dim f_Array_StudentMark<br>3.        变量标示符要符合标示符标准,同时容易理解,尽量使用英文单词来代替,尽量避免使用缩写或简写。<br>例如:存储校友通讯录的字符串变量定义为:<br>Dim sSchoolfellowAddressList;<br>虽然这样定义在输入的时候比较麻烦,但是,它大大提高了程序的可读性,见其变量命名就知其意。在做变量查找的时候也比较方便。 速度和性能总是不能两全,为了方便后者我们也就只有牺牲速度。<br>    4.在变量定义后面加变量功能定义的注释。<br>(二)常量命名规则:<br>   类型体现和上面一样,不一样的地方是,所有后面的标示符全部大写,例如:<br>定义一个存储语言种类的的字符型常量:<br>   Const sLANGUAGE_TYPE=”Chinese”<br>(三)功能函数、过程命名规则:<br>1.        使用Function声明函数,用Sub声明过程;<br>2.        函数名或过程名的第一个字母大写,且后面的每个单词第一个字母大写。<br>例如:<br>Function CheckValidityOfInput(sStuentMark)<br>‘此处写代码<br>…………<br>End Function<br>3.        函数名或过程名要容易读,简单明了。<br>4.        在函数前面加注释,说明函数功能、参数说明、创建日期、修改日期、修改原因、创建人、修改人等相关信息。<br>(四)代码缩进标准:<br>为了提高代码的美观型和易读性,在此提出代码编写的版面格式:区间与区间之间以一个&lt;Tab&gt;为间距。<br>例如:<br>‘***********************************************************<br>‘功能:检测输入字符串中的单引号,如果有则把原来的一个单引号变成两<br>‘      个单引号,两个变成四个,依次类推,从而避免SQL语句执行错误。<br>‘创建人:XXXX<br>‘创建时间:2002-7-6<br>‘修改时间:<br>‘修改原因:<br>‘修改人:<br>‘输入参数说明:sInputString:需要进行单引号检测的字符串<br>‘***********************************************************<br>Function CheckValidityOfInput(sInputString)<br>        Dim iCirculationControl               ‘控制循环<br>        Dim sApartString                         ‘分离字符检测<br>Dim iLenOfInput                         ‘输入字符长度<br>iLen= Len(Trim(sInputString)) <br>For iCirculationControl = 1 To iLen <br>If Mid(sInputString, iCirculationControl, 1) &lt;&gt;"'" Then <br>sApartString = sApartString &amp; _<br>Mid(Trim(sInputString), iCirculationControl , 1) <br>Else <br>sApartString = sApartString &amp; "''" <br>End If <br>Next <br>CheckValidityOfInput = sApartString<br>End Function<br>二、        统一JavaScript程序编写规范:<br>JavaScript的命名规则和上面大部分相同,唯一不同的地方是:变量使用Var来声明,在声明结束后以分号(;)结束。<br>函数的代码要求层次清楚,该写在下一行的地方尽量往下一行写,不要在一行中完成所有代码,这样看起来不容易,检查错误也特别费时。<br>在写函数的时候记着加注释内容,以便以后维护时快速了解程序功能。<br>下面是一个JavaScript程序:<br>&lt;Script Language=”JavaScript”&gt;<br>//***********************************************************************<br>//功能:对Form中的Text,Password,TextArea对象进行单引号处理,解决由于单引号<br>//      起的系统错误。<br>//创建人:XXXX<br>//创建时间:2002-7-8<br>//修改时间:<br>//修改原因:<br>//修改人:<br>//**********************************************************************<br>function CheckElement()<br>{<br>var sNeedCheck="";        //检测属于INPUT标签的内容 <br>var iControlInput=0;        //控制循环<br>var iLocationInput=0;       //控制位置<br>var iLengthInput=0;        //存储字符串长度<br>var sCheckingInput="";     //正在检测的字符<br>var sReplaceInput="";      //替换字符<br>var sHaveCheckInput="";   //已经检测的字符<br>var objInput;             //存储INPUT对象;<br>var objTextArea;          //存储TextArea对象<br>var iControlTextArea=0; <br>var iLocationTextArea=0; <br>var iLengthTextArea=0; <br>var sCheckingTextArea=""; <br>var sReplaceTextArea=""; <br>var sHaveCheckTextArea="";<br>   //检测页面中的Text和Password对象中的单引号<br>for (i = 0; i &lt; document.all.tags('INPUT').length; i++){<br>objInput = document.all.tags('INPUT'); <br> if(objInput.type=='text'|| objInput.type=='password'){<br>sNeedCheckInput=obj.value;<br>iLengthInput=sNeedCheckInput.length;<br>        for(iControl=0;iControl&lt;iLength;iControl++){<br>            sCheckingInput=sNeedCheckInput.charAt(iControl);<br>       if(sCheckingInput==”’”)<br>                       sReplaceInput=”’’”;<br>       else<br>           sReplaceInput=sCheckingInput;<br>           sHaveCheckInput=sHaveCheckInput+sReplaceInput;<br>    }  <br>}<br>objInput.value=sHaveCheckInput;<br>}<br>//检测页面中的TextArea对象中的单引号<br>for (i = 0; i &lt; document.all.tags('TEXTAREA').length; i++){<br>objTextArea = document.all.tags('TEXTAREA'); <br> if(objTextArea.type=='text'|| objTextArea.type=='password'){<br>sNeedCheckTextArea=obj.value;<br>iLengthTextArea=sNeedCheckTextArea.length;<br>        for(iControl=0;iControl&lt;iLength;iControl++){<br>            sCheckingTextArea=sNeedCheckTextArea.charAt(iControl);<br>       if(sCheckingTextArea==”’”)<br>                       sReplaceTextArea=”’’”;<br>       else<br>           sReplaceTextArea=sCheckingTextArea;<br>           sHaveCheckTextArea=sHaveCheckTextArea+<br>sReplaceTextArea;<br>    }  <br>}<br>objTextArea.value=sHaveCheckTextArea;<br>}<br>}<br>&lt;/Script&gt;<br>三、        系统性能提高,代码规范:<br>1.在ASP页面内,凡是使用CreageObject()创建的对象(Com、Recordset等),对于这些变量,应当在该页结束进行对象释放:即<br>Set 对象变量名=Nothing<br>2.数据库打开以后在不用的时候(通常是本页最后面),需要对连接进行关闭;<br>3.对于SQL语句,存储过程,尽量避免使用*来取所有字段,为了代码的易读性,SQL关键字要求全部大写,字段部分小写。<br>例如:<br>SELECT name,age,birthday,telephone,address FROM SchoolFellow.Address WHERE name=’xxxx’ ORDER BY birthday DESC<br>4.在ASP页中所有属性值尽量使用双引号括起来,特别是有属性Value的值,不要因为省时间而把双引号去掉(有的地方虽然可以去掉,程序不会出现错误,但,在有的地方去掉双引号会引来更多的麻烦。)<br>例如:<br>&lt;INPUT type=”text” id=”ClassID” name=”ClassID” value=”&lt;%=sClassID%&gt;”&gt;<br>在这个例子中,如果把Value属性值的单引号去掉,如果数据库中出来的值有空格,空格后面还有值,结果,显示的内容只有空格前面的内容,而后面的内容就会丢失。这只是其中一种情况,其他还有很多未知情况发生。<br>5.        配对标签问题:对于象&lt;a&gt;&lt;/a&gt;之类的标签,要注意检查配对的位值,有没有结束标志。<br>6.        对于需要输入字符串,且需要使用SQL语句的地方,需要进行单引号处理,调用/include/CheckQ.asp中的两个方法(一个是客户端处理,一个是服务器端处理,根据需要进行调用,安全性要求高的地方多数情况下采用服务器端处理。)之一。<br>7.        为了提高安全性,能使用ASP编写的代码,尽量采用ASP编写,在服务器端运行,不让用户看到代码。<br>8.        对于安全性要求特别高的地方,建议采用三层结构:使用VB或Delphi编写商业逻辑层代码(COM),尽量把数据库的连接部分封装到组件中,提高安全性能,通过组件和数据库交流。<br>9.        对于网站的安全性,应该采用好的断口扫描软件,查看网站已经打开的断口,把不安全的断口给关闭。<br>四、        养成写开发文档的习惯:<br>对于每一个页面设计(前接页,后接页),包括功能说明,页面设计,页面名称,存放位置等,应当有相应的文档记载。对于发生改动的地方,需要保留原来的部分(注释或备份),并说明备份文件存放的地方,改动时间,修改人。<br>对于程序部分,应该有相应的设计流程,改动的时候,也需要设计改动流程图,以便以后进行对比,和查找问题所在位置,以及问题的严重性分析。<br></P>
[此贴子已经被作者于2006-4-11 18:25:23编辑过]

 楼主| 发表于 2006-7-1 15:04:37 | 显示全部楼层
<>第一章 ASP编码规范通述<BR>    ASP编码分为两大部分,一部分为静态文件编码,一部分为包含服务器端脚本的动态文件编码。<BR>    静态文件编码分script编码和HTML编码两部分。<BR>    服务器端编码则分为服务器脚本、客户端脚本、HTML脚本三部分。<BR>    编码规范采用如下约定:<BR>     所有客户端脚本一律使用javascript<BR>     所有服务器端脚本一律使用VBscript<BR>     静态页面输出一律使用HTML脚本<BR>    本规范不适用于由服务器端脚本所产生的客户端脚本代码。<BR>  第二章 静态文件编码规范:<BR>    静态文件脚本部分采用javascript编写。输出部分采用HTML标记语言。<BR>  1. HTML标记语言编码规范<BR>  1.1 标记的换行规范:<BR>  * 一个标记必须占用一行。不得出现两个标记在同一行的情况(同一标记的关闭标记除外),如:  <BR> &lt;tr&gt;&lt;td&gt;text&lt;/td&gt;&lt;/tr&gt;<BR>  而必须写成:</P>
<>  &lt;tr&gt;<BR>   &lt;td&gt;text&lt;/td&gt;<BR>     &lt;tr&gt;</P>
<>  1.2 标记的关闭规范<BR>  * 静态文件内容必须包含在&lt;body&gt;&lt;/body&gt;标记中间<BR>  * &lt;body&gt;标记必须包含在&lt;html&gt;&lt;/html&gt;标记中间<BR>  * 对于需要关闭的标记,如:     <BR>&lt;html&gt;&lt;title&gt;&lt;body&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;&lt;textarea&gt;&lt;select&gt;&lt;font&gt;&lt;option&gt;&lt;div&gt;&lt;span&gt;</P>
<>    必须同其关闭标记同时出现。如     <BR>&lt;body&gt;...&lt;p&gt;...&lt;font&gt;....&lt;/font&gt;....&lt;/p&gt;.....&lt;/body&gt;</P>
<>  * 不得出现交叉包含的语句,如:   <BR>&lt;p&gt;&lt;font&gt;.....&lt;/p&gt;&lt;/font&gt;</P>
<>  1.3 标记的属性赋值规范<BR>    对于接受属性的标记,属性值必须使用双引号或者单引号包围。如:     <BR>&lt;body bgcolor="red"&gt;<BR>    &lt;font size='7'&gt;</P>
<>  1.4 标记的缩进规范<BR>  * 最高一级的父标记采用左对齐顶格方式书写。<BR>  * 下一级标记采用左对齐向右缩进一个Tab的方式书写<BR>    在下一级依此类推,分别左对齐相对于父标记向右缩进一个Tab的方式书写<BR>  * 同一级标记的首字符上下必须对齐。<BR>  2. 客户端javascript规范<BR>  2.1 变量命名规范<BR>  * 常量以及全局变量名必须全部使用大写字母<BR>  * 变量名首字母必须小写。<BR>  * 变量名必须使用其类型的所写字符串开始。各种类型的所写字符串如下:<BR>  * 整型变量:int<BR>  * 长整型变量:lng<BR>  * 浮点型变量:flt<BR>  * 双精度变量:dbl<BR>  * 对象引用变量:obj<BR>  * 字符串变量:str<BR>  * Date类型变量:dtm<BR>  * 变量名必须采用有意义的单词命名,如:<BR>  strUserName、lngArrayIndex<BR>  * 变量名除首字母小写外,其他单词首字符必须大写<BR>  * 如果变量名过长可以使用单词缩写,除了被广泛了解的单词缩写以外,所有使用单词所写的变量名必须在定义时给出注释,如:  <BR> var strAdName //用于表示Administrator帐户的名称<BR>  var strAdminName //不用给出注释,Admin被广泛了解</P>
<>  2.2 变量使用规范<BR>  * 变量使用前必须定义。没有定义的变量禁止使用<BR>  * 变量的使用尽量缩小到小的作用域。如循环使用 <BR>for(var I=0;I&lt;12;I++){ }<BR>  而不是:<BR>  var I;<BR>  for(I=0;I&lt;12,I++){ }</P>
<>  2.3 对象命名规范<BR>  各种页面对象如text输入框、按钮、下拉选择框在命名时必须使用以下对应前缀:<BR>  * text输入框:txt<BR>  * button按钮:btn<BR>  * select下拉选择框:sel<BR>  * option项pt<BR>  * form表单:frm<BR>  * frame框架:fra<BR>  * hidden表单项:hdn<BR>  * div标记:div<BR>  * span标记:span<BR>  * 对话框对象:dlg<BR>  * 窗口对象:win<BR>  2.4 函数以及子过程命名规范<BR>  * 函数命名必须使用动词+名词对的方式,并且能够体现函数的功能<BR>  * 函数命名的动词前缀必须是同函数功能相关的完整动词<BR>  * 函数命名第一个单词的首字母小写,后面每一个单词的首字母大写<BR>  第三章 动态文件编码规范<BR>  1. HTML书写规范<BR>    HTML书写规范必须符合静态文件HTML标记书写规范,参考(第二章第一节)<BR>  2. 客户端脚本规范<BR>    动态文件客户端脚本一律采用javascript书写,并必须符合静态文件编码规范中有关javascript编码规范的规定(参考第二章第二节)<BR>  3. 服务器端脚本书写规范<BR>    服务器端脚本书写采用VBscript书写<BR>  3.1 命名规范<BR>  3.1.1 VBscript脚本变量命名规范<BR>  * 常量以及全局变量必须全部使用大写字母<BR>  * 常量必须使用CONST_前缀<BR>  * 全局变量必须使用G_前缀<BR>  * 变量名首字母必须小写。<BR>  * 变量名必须使用其类型的所写字符串开始。各种类型的所写字符串如下:<BR>  * 整型变量:int<BR>  * 长整型变量:lng<BR>  * 浮点型变量:flt<BR>  * 双精度变量:dbl<BR>  * 对象引用变量:obj<BR>  * 字符串变量:str<BR>  * Date类型变量:dtm<BR>  * 变量名必须采用有意义的单词命名,如:<BR>  strUserName、lngArrayIndex<BR>  * 变量名除首字母小写外,其他单词首字符必须大写<BR>  * 如果变量名过长可以使用单词缩写,除了被广泛了解的单词缩写以外,所有使用单词所写的变量名必须在定义时给出注释,如:<BR>  dim strAdName ‘用于表示Administrator帐户的名称<BR>  dim strAdminName ‘不用给出注释,Admin被广泛了解<BR>    <BR>  3.1.2 对象命名规范<BR>  各种对象如Connection、Recordset、Command在命名时必须使用以下对应前缀:<BR>  * Connection对象:conn<BR>  * Recordset对象:rs<BR>  * Command对象:cmd<BR>  * Parameter对象:param<BR>  * Field对象:fld<BR>  * Error对象:err<BR>  3.1.3 函数以及子过程命名规范<BR>  * 函数命名必须使用动词+名词对的方式,并且能够体现函数的功能<BR>  * 函数命名的动词前缀必须是同函数功能相关的完整动词<BR>  * 函数命名第一个单词的首字母大写,后面每一个单词的首字母大写<BR>  3.1.4 常用变量命名规范:<BR>    说明:包含在[&gt;中的部分为可省略部分<BR>  * Connection对象:conn[Name&gt;。Name为所连接数据库的服务器名字<BR>  * Recordset变量命名规范:rs[Name&gt;。Name为自定义的同rs存储内容有关的英文单词组合<BR>  * Command对象:cmd[Name&gt;。Name为自定义的同command目的有关的英文单词组合<BR>  * SQL语句字符串变量:strSql[CommandName&gt;。CommandName为自定义的同Sql语句功能相关的英文单词组合,如:<BR>  strSqlUpdateModify<BR>  strSqlInsertUser<BR>  3.2 代码书写规范<BR>  3.2.1 变量明确声明原则<BR>  * 所有ASP程序文件,必须在代码的第一行包含&lt;%option explicit%&gt;。转为变量明确声明模式<BR>  3.2.2 字符集设定原则<BR>  * 所有将对客户端产生中文输出的ASP程序文件,必须在输出前设定Charset为"GB2312".如:Response.Charset = "GB2312"<BR>  3.2.3 函数使用原则<BR>  * 尽量使用函数封装代码块<BR>  * 连续代码块尽量不要超过50行。最多不得超过70行<BR>  * 尽量使用局部变量。<BR>  * 如有涉及到全局的资源,如Connection,尽量作为函数的参数传入<BR>  * 所有在函数内部创建打开的资源,在退出函数前必须关闭释放。如:Recordset,Command<BR>  3.2.4 Request、Session、Application使用规范<BR>  * 所有需要放入Session、Application中的对象,必须采用有意义的英文名字。除了被广泛了解的单词缩写以外,不得采用单词缩写。如:   <BR>Session("cp") = strCurrentUserIP ‘不允许<BR>  Session("CurrentUserIP") = strCurrentUserIP<BR>  Session("wd") = strPwd ‘允许,Pwd被广泛了解为密码</P>
<P>  * 所有需要在代码内用到的Request、Session、Application中的元素,必须在代码头部赋值给代码内声明的变量。<BR>  * 如果获得Form中提交的内容,必须使用Request.Form("itemName").<BR>  * 如果获得QueryString中提交的内容,必须使用Request.QueryString("itemName")<BR>  * 不得在代码中出现Request("")这样的引用方式<BR>  3.2.5 HTML同服务器端脚本混合使用原则<BR>  * 服务器端脚本标记"&lt;%"必须同其上一行紧邻的标记左对齐,如:   <BR>&lt;table&gt;<BR>  &lt;% <BR>  do while not rs.eof <BR>  %&gt;<BR>   &lt;tr&gt;<BR>   &lt;td&gt;text&lt;/td&gt;<BR>   &lt;/tr&gt;<BR>  &lt;%<BR>   rs.movenext<BR>   loop<BR>  %&gt;<BR>  &lt;/table&gt;</P>
<P>  * 服务器端脚本标记"&lt;%"同其后的代码不得在同一行书写<BR>  * "%&gt;"同其前面的代码不得在同一行书写<BR>  * 服务器端脚本标记"%&gt;"同其最近的"&lt;%"标记对齐<BR>  * 服务器端内部的HTML代码依据静态文件的HTML缩进规则编写,不遵循服务器端脚本缩进规则<BR>  * HTML标记内部的代码,依据服务器端脚本的缩进规则,不遵循HTML代码缩进规则 第四章 常见错误<BR>  1. ADO的事务处理<BR>  1.1 错误代码:80004005。<BR>  1.1.1 错误描述:<BR>    Microsoft OLE DB Provider for ODBC Drivers 错误 ''''''''80004005'''''''' <BR>    不能在 firehose 方式下启动事务 <BR>  1.1.2 解决方法:<BR>    在开始ADO的事务的时候,必须首先关闭使用同一个连接对象打开的记录集,或者在打开那些游标集之前,设置游标集位置类型为adUseClient.(使用客户端游标集)<BR>    <BR>  第五章 代码习惯书写示例<BR>  1. ADO对象的使用<BR>  1.1 ADODB.Connection对象<BR>  1.2 ADODB.Command对象<BR>  1.3 ADODB.Recordset对象<BR>  1.3.1 创建:    <BR> Set rs = Server.CreateObject("ADODB.Recordset")<BR>    rs.CursorLocation = adUseClient<BR>    rs.Open strSql,conn,1[,1&gt; ‘必须指定游标类型</P>
回复

使用道具 举报

发表于 2007-9-10 18:03:02 | 显示全部楼层
请教:怎么用ASP程序+GEO Media Web Map 结合开发包含电子地理信息地图的应用软件?
回复

使用道具 举报

发表于 2009-4-10 09:17:09 | 显示全部楼层

偶路过,留个脚印先.....

偶路过,留个脚印先.....
















古之立大事者,不惟有超世之才,亦必有坚忍不拔之志。---魔兽剑圣异界纵横
小游戏 极品家丁 龙蛇演义 恶魔法则 飞升之后 异界枪神 凡人修仙传 魔兽领主 超级农民 成人小游戏 极品公子
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 入学

本版积分规则

QQ|Archiver|手机版|小黑屋|校园天空成立于2004年2月24日 ( 陕ICP备08000078号-8 )

GMT+8, 2025-5-11 12:06 , Processed in 0.096703 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表