至此,一个完整的三层结构的应用程序已经完成了,让我们看以下,如果把"合格"的定义改为:只有成绩进入前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理论书籍并在实践中不断总结,相信您一定能设计出自己的完美的多层结构的应用程序。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器