一份代码编写标准,项目开发时要借鉴的!
天津软件职业技术学院吧
全部回复
仅看楼主
level 2
该标准是一个项目组开发程序的编写准则,此文仅起抛砖引玉的作用,希望在你做项目开发的时候也要制定一份这样的代码编写标准,以便多人合作时有规则可循,方可达到代码格式统一一、通用源代码格式规则 1.1 开发工具 推荐使用Microsoft 公司的Visual InterDev 来书写ASP 代码,使用Macromedia ? 公司的Dreamweaver 来书写HTML代码,也可以使用UltraEdit、ASPEdit 2000等开发工具。 1.2 缩进空格 缩进空格是指在每一级有两到四个空格。不要在源代码中保留TAB字符,这是因为TAB字符会随着不同用户的不同设置和不同的资源管理工具(打印、文档、版本控制等)而代表不同的宽度。 1.3 数据合法性检查 所有表单提交页面中,表单上必须填写项目和填写项目中非法输入的判断都在页面中用javascript在客户端判断,如果必须和服务器端数据比较才能判断输入项目是否正确不在此例。 所有提交的信息(GET方式及POST方式)都必须在服务器端重新进行数据合法性校验,并过滤非法字符(& ; ` ' \ " | * ? ~ < > ^ ( ) [ ] { } $ \n \r),例如,将"'"替换成"''" (两个单引号)号(替换字符串的工作将统一使用公共的CheckInputString(str) 函数);而对于数字型变量,要检查输入的数据是否全为数字(javascript中使用isFinite或isNaN, VbScript中使用IsNumeric)。 1.4 参数传递 建议使用POST方法,而不推荐使用GET方法; 严禁使用GET方法、SESSION或其它方式传递SQL语句; 禁止使用GET方式传递大量的查询字符串,特别是未经编码的汉字,HTTP协议传送表单域比查询字符串效率要高,而且带有一个大的查询字符串的页面在某些浏览器上会失效; 禁止使用SESSION、COOKIE传递非会话期间必要的参数。 1.5 URL 包含头文件,页面的链接,提交的页面,用到的图片,如果引用的是如"include"、"image"等公共部分,必须使用绝对路径,即以虚根目录"/"开始的路径,以提高运行效率。例如: 6.4 使用最简单的游标类型和记录锁定方式 在 ADO 中定义了四种不同的游标类型: l动态游标(adOpenForwardOnly) - 用于查看其他用户所作的添加、更改和删除,并用于不依赖书签的 Recordset 中各种类型的移动。如果提供者支持,可使用书签。 l键集游标(adOpenKeyset) - 其行为类似动态游标,不同的只是禁止查看其他用户添加的记录,并禁止访问其他用户删除的记录,其他用户所作的数据更改将依然可见。它始终支持书签,因此允许 Recordset 中各种类型的移动。 l静态游标(adOpenDynamic) - 提供记录集合的静态副本以查找数据或生成报告。它始终支持书签,因此允许 Recordset 中各种类型的移动。其他用户所作的添加、更改或删除将不可见。这是打开客户端 (ADOR) Recordset 对象时唯一允许使用的游标类型。 l仅向前游标(adOpenStatic) - 除仅允许在记录中向前滚动之外,其行为类似动态游标。这样,当需要在 Recordset 中单程移动时就可提高性能。 在打开 Recordset 之前设置 CursorType 属性来选择游标类型,或使用 Open 方法传递 CursorType 参数。部分提供者不支持所有游标类型。请检查提供者的文档。如果没有指定游标类型,ADO 将默认打开仅向前游标。 在 ADO 中定义了四种不同的游标类型: ladLockReadOnly - 默认值,只读。无法更改数据。 ladLockPessimistic - 保守式记录锁定(逐条)。提供者执行必要的操作确保成功编辑记录,通常采用编辑时立即锁定数据源的记录的方式。 ladLockOptimistic - 开放式记录锁定(逐条)。提供者使用开放式锁定,只在调用 Update 方法时锁定记录。 ladLockBatchOptimistic - 开放式批更新。用于与立即更新模式相反的批更新模式。 打开 Recordset 前设置 LockType 属性可指定打开时提供者应该使用的锁定类型。读取该属性可返回在打开的 Recordset 对象上正在使用的锁定类型。Recordset 关闭时 LockType 属性为读/写,打开时该属性为只读。 
2006年06月14日 12点06分 1
level 2
l仅向前游标(adOpenStatic) — 除仅允许在记录中向前滚动之外,其行为类似动态游标。这样,当需要在 Recordset 中单程移动时就可提高性能。 在打开 Recordset 之前设置 CursorType 属性来选择游标类型,或使用 Open 方法传递 CursorType 参数。部分提供者不支持所有游标类型。请检查提供者的文档。如果没有指定游标类型,ADO 将默认打开仅向前游标。 在 ADO 中定义了四种不同的游标类型: ladLockReadOnly — 默认值,只读。无法更改数据。 ladLockPessimistic — 保守式记录锁定(逐条)。提供者执行必要的操作确保成功编辑记录,通常采用编辑时立即锁定数据源的记录的方式。 ladLockOptimistic — 开放式记录锁定(逐条)。提供者使用开放式锁定,只在调用 Update 方法时锁定记录。 ladLockBatchOptimistic — 开放式批更新。用于与立即更新模式相反的批更新模式。 打开 Recordset 前设置 LockType 属性可指定打开时提供者应该使用的锁定类型。读取该属性可返回在打开的 Recordset 对象上正在使用的锁定类型。Recordset 关闭时 LockType 属性为读/写,打开时该属性为只读。 在实际使用过程中应该使用适合于处理任务的最简单的游标类型和记录锁定方式。例如: 仅打开一个静态的记录集并输出: Rs.Open sql,Conn,0,1 ‘ adOpenForwardOnly, adLockReadOnly 打开的记录集中有text类型的字段: Rs.Open sql,Conn,1,1 ‘adOpenKeyset, adLockReadOnly 6.4 SQL字符串过滤 所有的字符串输入框在向数据库提交查询、插入、删除或修改一条记录时必须用字符串过滤函数检查,即: 字符型:复写提交内容中的“’”、“’’”等(使用公共函数的CheckInputString()。),并检查字符串的长度是否超长。 数值型:使用IsNumeric()判断输入是否为数字。 整 型:使用Int(), Fix(),Round() 截取其整数值。 日期型:使用isDate()函数判断是否为
正确的
日期输入。 6.5 SQL事务执行 对数据库操作的事务一般应当使用SQL的存储过程执行。对于需要在ASP页面中执行的数据库操作,所有插入、删除、修改数据库不得使用RecordSet对象,必须使用Connect对象用SQL语句执行,RecordSet只在执行查询时使用。所有检索数据库的操作禁止使用“SELECT * FROM …”,而要使用“SELECT 字段一, 字段二, 字段三, … FROM…”。 6.6 ADO对象的关闭 所有连接数据库页面中,Connect和Recordset等ADO对象必须在用完后立即关闭(Close),然后将其对象释放(Set ***=nothing)。 五、ASP程序 5.1 变量声明 在所有用到变量的ASP页面中必须在程序说明的下一行写上<% OPTION EXPLICIT %>。因为没申明的局部变量和全局变量一样慢(比定义过的局部变量要慢一倍)。被包含的公共文件例外。 5.2 程序说明 每一个程序文件的开头必须说明文件的作用或功能、程序的入口参数、参数说明、作者、编写日期(包括生成日期、最后修改日期)。格式如下: <% '** ‘Comment: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ‘Input: (must) logon_id-User Name; logon_pd-User Password ‘ (plus) ‘Editor: xxxxx 2000-11 ‘Modify: xxxxx 2000-12 ‘** %> 5.3 最小化上下文切换 出于服务器处理脚本性能的考虑,建议应尽量使HTML和脚本的上下文切换最小化。在可能的情况下,应在一页内使用少数大块脚本代替多个分散的片段。例如: <% IF a > 1 THEN %> 第一 <% ELSE %> 第二 <% END IF %> 最好写成如下格式: <% IF a > 1 THEN Response.Write “ 第一 ” ELSE Response.Write “ 第二 ” END IF %> 5.4 分隔脚本行以增加可读性 
2006年06月14日 12点06分 5
level 2
脚本行应该被一对定界符(“<%”、“%>”)分割为代码块,而不是在每一行上书写定界符。下面代码: <% strEmail = Session("Email") %> <% strFirstName=Request ("FirstName") %> <% strLastName=Request("LastName") %> 应写成如下格式: <% strEmail = Session("Email") strFirstName=Request ("FirstName") strLastName=Request("lastName") %> 对于单独的脚本行,在相同行上作为脚本保持定界符。例如: <% strEmail=Session("Email") %> 如果脚本行由一个等号和一个变量组成,应将等号作为定界符的一部分。例如: <% = strSubscrlName %> 5.5 禁止使用Session 由于SESSION 对负载均衡有影响,因此SESSION 将不再使用,而统一使用COOKIE来维护用户状态。 5.6 对于运行时间长的页面,使用Response.Flush方法 每个写操作都会产生很大的系统开销(在 IIS 中以及在通过网络发送的数据量方面),因此写操作越少越好。由于其启动慢且使用 Nagling 算法(用来减轻网络塞车情况),TCP/IP 在发送一些大的数据块时比必须发送许多小的数据块时的效率高得多。 对于运行时间长的页面,必须利用 Response.Flush 方法。这种方法将 ASP 转换的所有 HTML 送到浏览器。例如,在转换 1,000 行的表的前 100 行之后,ASP 可以调用 Response.Flush,强制将转换的结果送到浏览器,这样可使用户在其余的行准备好之前看到头 100 行。这种技术可以将响应缓冲与浏览器逐渐显示数据完美地结合在一起。而且,还能解决当产生非常大的页面时,将占用许多服务器内存的问题。 经验表明,不要每次重复执行紧密循环时都调用它,如显示表的许多行时 - 每隔二十或五十行调用一次可能比较合适。 5.7 最好迟一点获得资源,早一点释放资源 用于 COM 对象以及文件句柄和其它资源。在对象使用完毕,应及时将 VBScript 变量设置为 Nothing(在将记录集或连接设置为 = Nothing 之前,不要忘记调用 Close())。 5.8 尽可能使用 Server.Transfer 代替 Response.Redirect Response.Redirect 让浏览器请求另一个页面。此函数常用来将用户重定向到一个登录或错误页面。因为重定向强制请求新页面,结果是浏览器必须到 Web 服务器往返两次,且 Web 服务器必须多处理一个请求。IIS 5.0 引入了一个新的方法 Server.Transfer,它将执行转移到同一台服务器上的另一个 ASP 页,并且将原页面的Request集等全部转移到新页面。这样就避免多余的浏览器-Web-服务器的往返,从而改善了总体系统性能以及缩短了用户的响应时间。 检查“重定向”中的“新的方向”,如果只是想引用一个外部的文件作为过程,然后将控制权再转回本页面,则可以使用Server.Execute。 5.9 包含文件禁止使用 .inc 为扩展名 为了防止放置在包含文件中的敏感信息被意外下载,禁止使用 .inc 为包含文件的扩展名,而使用 .asp 为扩展名,并且放置在专用的目录下。
2006年06月14日 12点06分 6
1