如何建立三层体系结构的ASP应用程序(2)
2012-4-10编辑:zwj
至此,一个完整的三层结构的应用程序已经完成了,让我们看以下,如果把"合格"的定义改为:只有成绩进入前100名才算合格,程序需要做那些修改。事实上,如果你的数据库系统是SQL Server,你只需把SQL语句改为:
sql="select top 100 EMPLID from Employee order by Score desc" 就已经可以了,即使为了跨数据库系统的兼容性,我们也只需要对GetQualifiedList做如下修改:
sql="select EMPLID from Employee order by Score desc"
with rs
.open sql,conn,1,3
if .eof and .bof then
exit sub
else
i=1
do while (not .eof) and (i<=100)
dim oEmployee as new Employee
oEmployee.Create trim(.Fields("EMPLID"))
colQualifiedList.Add oEmployee
set oEmployee=nothing
i=i+1
loop
end if
.close
end with
...
然后把DLL重新编译,注册就可以了,ASP程序完全不必修改。
四、一些说明和注意事项
1、 由于这个例子比较简单,在Employee类中可以没有Create方法,而在Employees类中将员工的所有信息(工号,姓名,性别,成绩)都读出来并将其赋给Employee对象对应的属性。但在实际应用中,当Employee对象的属性增多,或表的数量增多,表之间关系变复杂时,还是本文所示的方法更有效,代码重用的机会更大。
2、当DLL被修改后,在MTS中只能将其删除后重新注册,因为每次重新编译后在注册表中对象的ID值都将重新生成。
3、从ASP中调用带参数的类方法和函数时,所有的变量参数一定要用相应的类型转换函数转换后再传入,否则会引起类型不匹配错误,因为VBScript中只有Variant类型,它不能自动转换成其它类型。例如,有如下的函数定义:
Public Function Fun1(p1 as string,p2 as integer) as integer
End Function
在ASP程序中应如下调用:
<%
p1=obj.property1 ' Property1 is a string property
p2=obj.property2 'Property2 is an integer property
a=obj.Fun1(cstr(p1),cint(p2))
a=obj.Fun1("aaa",10) ' constant parameter need not be changed
%>
而下面的两种写法是错误的:
<%
p1=obj.property1 ' Property1 is a string property
p2=obj.property2 'Property2 is an integer property
a=obj.Fun1(p1,p2) ' incorrect,p1 and p2 are variant variables
p1=cstr(p1)
p2=cint(p2)
a=obj.Fun1(p1,p2) ' still incorrect
%>
这里第二种写法仍然是错误的,即使经过了类型转换,p1和p2仍然是Variant变量。在VBScript中,数据类型和类型转换函数只在表达式运算中起作用,变量只有Variant一种类型。
结束语
以上对多层结构的理论和实践进行了一番探讨,希望能对您的开发有所帮助。这里还有一个问题,即类和类的成员该如何设计。这既涉及面向对象编程的理论,也需要一定的实践经验。请参考相关的OOP理论书籍并在实践中不断总结,相信您一定能设计出自己的完美的多层结构的应用程序。