至此,一个完整的三层结构的应用程序已经完成了,让我们看以下,如果把"合格"的定义改为:只有成绩进入前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理论书籍并在实践中不断总结,相信您一定能设计出自己的完美的多层结构的应用程序。