ASP 指南
作者:J.D. Meier
发表日期:1999 年 12 月 27 日
简介
“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”(英文)(http://support.microsoft.com/support/kb/articles/Q110/2/64.asp)对命名约定提供了真知灼见。
尽可能采用目录结构为您的各个应用程序部件提供始终如一的位置。您应用程序的实际目录结构当然由您自己决定,但通常是将图像、文档、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”(英文)(http://msdn.microsoft.com/workshop/server/asp/aspconv.asp)。
原则 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”(英文)(http://msdn.microsoft.com/workshop/server/feature/security.asp)
- “Q172925 INFO: Security Issues with Objects in ASP and ISAPI Extensions”(英文)(http://support.microsoft.com/support/kb/articles/Q172/9/25.asp)
原则 3:封装业务逻辑
ASP 技术通过生成 HTML 输出提供了表示服务。简而言之,它会生成用户界面。您需要将商务逻辑从 ASP 表示脚本中分隔开来。即使您不使用 COM 组件将业务逻辑从 ASP 代码中分隔开来,至少也要将业务逻辑分隔到函数和 include 文件中,以提高可维护性、可读性和可重用性。在需要排除故障和隔离问题时,您还能体会模块化设计方法的好处。
调用脚本内部调用函数和方法,可避免代码乱作一团,并能在 ASP 应用程序中添加结构。下面举例说明从 ASP 代码中,将逻辑分离到方法调用中:
lt;% Main() MyBizMethod() ... Sub Main() GetData() DisplayData() End Sub%>
在使用包含 ASP 功能的技术时,可以应用这一原则。下面举一个使用 Visual Basic WebClass 时的例子,说明如何使用这一原则:
- 因为 WebClass 本身引用 ASP 代码生成 HTML,所以您不要将业务逻辑直接置于 WebClass 内。因为这是您的表示层,不在 MTS/COM+ 下直接运行 WebClass。
- 从 WebClass,可以调用能运行在 MTS/COM+ 中的单独业务组件。
- 您可以决定创建自己的、具有对 ASP 引用的 COM 组件,而不是依赖于 WebClass 框架结构和额外的 WebClass 运行时开销 — 您也可以使用 ASP 脚本直接将业务组件自动化。
原则 4:尽晚获取资源,尽早释放资源
常见的问题是,从桌面系统到服务器的过渡。许多具有桌面系统背景的开发人员从来没有为服务器的一些问题和资源共享担心过。在传统的桌面应用程序中,连接到服务器是个耗时的过程。为了改善用户的体验,通常采用尽早获取资源和推迟释放资源的方法。例如,许多应用程序会在它的整个运行时间内始终连接着数据库。