ASP 指南
简介
“Active Server Page (ASP)”应用程序的成功常常取决于对体系结构和设计这两方面的取舍。考虑到 ASP 技术的范围之广和当前应用程序固有的复杂性,这种取舍是非常困难的。本文中,我将为您提供一些特定的指导方针,以助您成功开发基于 ASP 的应用程序。
--------------------------------------------------------------------------------
从过去成功的开发模式经验中,我们总结出以下原则。
--------------------------------------------------------------------------------
我已将指导方针整理成一组开发原则。在评估解决方案和技术时,可以应用以下原则帮助您做出决策。以下原则是我长期以来从成功的开发模式所得的经验积累。
原则 1:采用标准方法
建立命名约定并使目录结构标准化,可以帮助您大大提高 ASP 应用程序的可读性和可维护性。虽然目前尚无 ASP 应用程序的正式标准,许多开发人员还是建立了一些通用方式。在此,我将与您共享一些更为通用的方式。
因为 ASP 技术依靠脚本引擎进行工作,而且脚本具有类型不严密的天性,命名约定也很模糊。在类型非常严密的语言中,变量将按照它的实际类型进行声明。在使用 ASP 技术时,通常按照处理变量的方式(而不是其实际数据类型)在 ASP 代码中声明变量。例如,在使用“Visual Basic(R) Scripting Edition (VBScript)”时,尽管所有的 VBScript 变量都是 Variant,你还是会将成功标志声明为 bSuccess(b 代表布尔型),而不是 vSuccess(v 代表 Variant)。
下表是一些通行的命名约定。
变量前缀:
前缀 使用的变量 变量示例
b or bln Boolean bSuccess
c or cur Currency cAmount
d or dbl Double dblQuantity
dt or dat Date and Time dtDate
f or flt Float fRatio
l or lng Long lMilliseconds
i or int Integer iCounter
s or str String sName
a or arr Array aUsers()
o or obj COM Object oPipeline
数据库对象的变量前缀:
前缀 使用的变量 变量示例
cnn Connection cnnPubs
rst Recordset rstAuthors
cmd Command cmdEmployee
fld Field fldLastName
范围及前缀的用法:
前缀 说明
g_ 创建于 Global.asa。
m_ 对于 ASP 页或在 Include 文件中是局部的。
(没有前缀) 非静态变量,对于过程来说前缀是局部的
Knowledge Base (KB) 中的一篇文章“Q110264 INFO: Microsoft Consulting Services Naming Conventions for Visual Basic”(英文)对命名约定提供了真知灼见。
尽可能采用目录结构为您的各个应用程序部件提供始终如一的位置。您应用程序的实际目录结构当然由您自己决定,但通常是将图像、文档、include 文件和组件分别放置在单独的目录中。以下是简单 ASP 应用程序目录结构示例。
目录结构示例:
\SimpleAspApp
\Docs
\Images
\Includes
一个好的目录结构允许您有选择地应用 NTFS 权限。您还可以从 ASP 应用程序内部使用相对路径。例如,可以使用以下代码,从位于 SimpleAspApp 目录的 default.asp 页,引用 Includes 目录中的 include 文件 top.asp:
./includes/top.asp
注意我的 include 文件的扩展名是 .asp,而不是 .inc。这样做是出于安全方面的考虑,而且使用 .asp 扩展名(而不是 .inc),还能够在 Visual InterDev(R) 中使用彩色编码。
有关结构化 ASP 应用程序的其他一些提示和技巧,请参阅文章“ASP Conventions”(英文)。
原则 2:设计为在服务下运行
ASP 将在服务下运行。设计 ASP 应用程序时,您马上会面临在桌面应用程序中不会遇到的安全环境和线程问题。在桌面环境中,通常只处理作为交互式用户运行的单线程执行,而且有权访问当前的桌面系统。在“Internet 信息服务 (IIS)”中,模拟不同用户环境的多个客户机线程调用您的应用程序,而且您的应用程序被限于“系统”桌面。
这对您来说意味着什么?请学习 IIS 的安全模式。还要提醒您:仅因为某些东西能在 Visual Basic IDE 下能够正常运行,并不意味着它就能在 ASP 技术中安全运行。Visual Basic IDE 并没有准确地模拟运行时环境。常见的设计错误包括:在 ASP 技术中使用需要用户界面的 .OCX 控件,使用对线程来说不安全的组件,和使用要求特殊的用户上下文的组件。要避免的一个最简单的问题,就是从应用程序中试图访问 HKEY_CURRENT_USER (HKCU) 注册表项(例如,不要调用 Visual Basic 的 GetSetting 和 SaveSetting 函数,它们都依赖于 HKCU)。同样,不要出现需要用户进行人机交互的消息框或其他对话框。
以下文章是有关 ASP 技术中的安全和验证问题的相当不错的入门读物:
“Authentication and Security for Internet Developers”(英文)
“Q172925 INFO: Security Issues with Objects in ASP and ISAPI Extensions”(英文)
原则 3:封装业务逻辑
ASP 技术通过生成 HTML 输出提供了表示服务。简而言之,它会生成用户界面。您需要将商务逻辑从 ASP 表示脚本中分隔开来。即使您不使用 COM 组件将业务逻辑从 ASP 代码中分隔开来,至少也要将业务逻辑分隔到函数和 include 文件中,以提高可维护性、可读性和可重用性。在需要排除故障和隔离问题时,您还能体会模块化设计方法的好处。
调用脚本内部调用函数和方法,可避免代码乱作一团,并能在 ASP 应用程序中添加结构。下面举例说明从 ASP 代码中,将逻辑分离到方法调用中:
lt;% Main()
MyBizMethod()
...
Sub Main()
GetData()
DisplayData()
End Sub
%>
在使用包含 ASP 功能的技术时,可以应用这一原则。下面举一个使用 Visual Basic WebClass 时的例子,说明如何使用这一原则:
因为 Web