ASP基础知识之ASP框架设计
一,概述
ASP源代码的容易获得(如果用DLL封装则又不利于虚拟主机部署)使得ASP源码在国内流行到泛滥,程序员倾向于快速编程和快速忘记,可读性和维护性都为人诟病。其实,ASP代码也可以支持"不彻底"的面向对象编程和模块化,籍此创建的ASP框架可以最大限度地封装操作,优化代码,利于维护和阅读及向ASP.NET整合或迁移。
二,设计模式
因为ASP只是支持不彻底的面向对象思想,所以很多设计模式是不能真正实现的,只能以设计模式思想作指导,以VBScript为实现(可结合COM组件技术)来编写ASP框架Framework。
1, DNA架构:ASP框架是典型的微软的DNA架构,包括数据层(data),业务层(business),表示层(presentation)的三层体系结构,业务层是整个应用的心脏(核心)部分。
DNA(Windows Distributed Internet Applications Architecture分布式互连网应用结构)架构:
(1),数据存储层(data): 数据服务层为应用提供数据来源。我们可以根据需要选择MicrosoftSQLServer、Oracle或任何与OLEDB或ODBC兼容的数据源。
使用中等规模以上的关系数据库,采用存储过程、触发器。确定数据库结构主要方法是:客户需求能否满足--进行数据库范式化--性能是否受影响--进行数据库非范式化。数据库设计必须遵循一致的规范,设计好就马上编写相应的存储过程、触发器,
(2),业务层(business):事务逻辑层负责处理表示层的应用请求,完成商务逻辑的计算任务,并将处理结果返回给用户。事务逻辑处理层是将原先置于C/S客户端的事务逻辑分离出来,集中置于服务器部分,为所有用户共享。
A,数据访问层DAL(Data Access Layer): 负责访问和控制所有数据库,为了便于改动可以暂时写成一个VBS CLASS进行封装,在后台开发完毕后再封装成COM+组件。所有用户提交的数据全都交给DAL处理,比如FORM数据或者是URL参数,后台逻辑层的其它相关处理都必须从DAL获取返回值,这里应该进行的操作一般有:获取Request数据--进行安全处理--检查用户数据是否规范--输出返回值。
B,业务逻辑层(Business Logic Layer):建议把相关性的业务活动封装成一个个的VBS CLASS。比如要求制作一个内部的调货平台,那么就必然有入库、出库、分仓库存、汇总等操作,那么把这些跟仓库相关的操作都整理成一个CLASS,再从CLASS内部去调用上面提到的数据库处理层那些去协同处理仓库相关的操作。尤其要考虑权限控制层:要支持用户分组和二层用户角色(类似于Windows的二层用户角色),甚至大型项目的N级可继承的用户角色。
(3),表示层(presentation): 是以Java Script(浏览器的支持较友好)+XML为主的可加上HTM,DHTML,Scripting,JavaApplet?,Active X等组成的用户界面层和数据传递层,Internet环境中常为瘦型客户机,以实现用户与应用逻辑处理结果的通信。一般后台管理的用户界面层风格比较固定,可以使用封装好的统一的各种表格、表单、统计报表等风格。而用于前台的用户界面风格比较多变,就可采用UI框架进行开发,对于大型项目,应采用轻量级框架,JSVM是一个不错的选择。数据传递层(网页表单)负责预处理用户提交的所有数据,也负责接收后台输出的轻量级数据,可采用JSAX技术获取局部资料等
2,COM组件技术:COM(组件对象模型)则相当于业务层这个心脏可选用的加速器。
业务层通过COM组件进行事务处理,可以使用VB(VC和C++等)来创建用户组件,可以将同一业务逻辑下的页面和逻辑封装到一个类里,用不同的方法来实现。这样就能充分利用廉价的内存来存储逻辑上独立的一个复杂对象,从而减少昂贵资源(例如数据库链接)的使用。为了代码和数据库安全,也为了开发公司的安全,对于核心业务层,一般都要求编译成DLL组件。而且业务层COM组件的开发和测试工作,和根据商务逻辑的需要以精练的ASP脚本语言来选择和使用COM组件的工作就实现了分工。这对组件的标准化和复用效率是有利的。
IIS(Internet Information Server)负责业务层Web页面的管理,MTS(Microsoft Transaction Server)负责统一管理业务层COM组件。MTS在多线程支持下实现对COM组件的分布式连接管理、线程池自动管理及高性能事务处理的监视。这样数据库不再和(C/S两层体系结构中)每个活动客户保持一个连接,而是若干个客户通过应用逻辑组件共享数据库的连接,从而减少了连接次数;而且MTS的安全管理机制可以按权限将特定组件授给不同的用户组,提高了数据服务器的性能和安全性。
可以使用XML的提供应用程序的简单配置,在ASP页面与组件之间建立一种松散联系。有了这种联系,应用程序就可以以一种非常随意而轻松的方式进行分工、拆卸和组装。这种思想也可以借鉴MVC Struts中的struts-config.xml和ASP.NET中的web.config。
3, ACCESS的类似SQL存储过程封装:ACCESS2000在AC库中提供了传递参数的查询,所以可以使用类似于SQL存储过程的方式来封装ASP中的SQL语句到查询中,直接用ADODB.COMMAND对象来调用返回值。虽然目前该方法执行效率不高,但可以将对数据库的操作从程序中剥离了开来。实现了:显示层、逻辑层、数据库操作层的彻底分离。
举例说明:
USER表:U_Id,U_Name,U_Key
Login查询:SELECT User.U_Id FROM User WHERE User.U_Name=[@UserName?] AND User.U_Key=[@UserKey?];
建立Login类:
主要代码如下:
Public Function getUID(UserName,UserKey)
Dim CMD,Rs
Set CMD=Server.CreateObject("ADODB.COMMAND")
CMD.ActiveConnection = Conn
CMD.CommandType = 4
CMD.CommandText = "Login"
Set Rs = CMD.Execute ( ,Array(UserName,UserKey))
Set CMD = Nothing
If Rs.EOF And Rs.BOF Then
getUID = ""
Else
getUID = Rs("U_Id")
End If
Set Rs = Nothing
End Function
逻辑层调用代码:
Dim theUID
Dim Login
If UserName <> "" Or UserKey <> "" Then
'clsLogin类就是前面建立的Login类
Set Login = New clsLogin
Login.Connection = Conn
theUID = Login.getUID(UserName,UserKey)
Set Login = Nothing
If theUID <> "" Then
Response.Write "登陆成功!"
Else
Response.Write "登陆失败!"
End If
Response.End
End If
更多精彩尽在站长资源库电脑知识网 www.zzzyk.com