巨人的肩膀上。当然,如果你使用VC的话,重用最多的代码就是MFC的类库。
============================================================
OK,那么看看我们如何使用ASP的。
大家一般都是使用IIS的默认脚本语言VbScript作为ASP的服务器端执行语言的,在起初基本都是将该VBS脚本和HTML掺合在一起,实现着某些功能。比如需要在当前页显示最新的5条记录了,就可以这样。
1,先定义数据库的连接,如:
db_path = "../database/cnbruce2005.mdb" Set conn= Server.CreateObject("ADODB.Connection") connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath(db_path) conn.Open connstr
|
2,然后建立数据库记录集合,提取相关信息
Set rs = Server.CreateObject ("ADODB.Recordset") sql = "Select top 5 * from [news] order by n_id desc" rs.Open sql,conn,1,1
|
3,最后通过循环的方法将数据显示出来
do while not rs.eof response.write rs("n_title") rs.movenext loop ''还有最后的关闭和释放操作 rs.close set rs=nothing
|
那么就是在 response.write rs("n_title") 这里,为了最终的网页设计的需要,在它的前前后后,估计还是需要加入一些其他的HTML标签元素的。于是很自然的,VBS脚本和HTML掺合了。
再来看,如果说有很多页都需要显示这5条记录,那是不是每个页都要这样去设置,当然最主要的只是每个页的设计样子不同。那这就是重复。重复在那里?那里可以不要重复?
1,针对数据库的连接,都直接建立了一个数据库连接文件conn.asp,内容即如上。
2,那么只要是需要使用数据库的,需要建立连接的,直接包含引用该数据库连接文件,即可了事。
<!--#include file="conn.asp"-->
那么上面是省去的什么重复?每次数据库连接的重复。这是对于通用的某些共用的代码的防重复。接着来看,如果说我要这个页面显示5条,那个页面显示6条,又该如何?很显然,这只能是对当前页中的SQL语句进行简单的修改,比如原来是 top 5 的修改为 top 6。
OK,继续看,是不是还有重复?有,除了SQL
查询定义的不同,其他的都是重复。
于是,继续想办法:可不可以自己来定义提取的条数?就是我想提取几条就几条,但
程序只需要写一个。那么这时候,函数的就派上用场了啊。比如我定义这样的函数:
Function topnews(tnum)
Set rs = Server.CreateObject ("ADODB.Recordset") sql = "Select top "&tnum&" * from [news] order by n_id desc" rs.Open sql,conn,1,1
do while not rs.eof response.write rs("n_title") rs.movenext loop
rs.close set rs=nothing
End Function
|
那么,就可以使用 topnews(5) 或者 topnews(6) 来完成需要了
……咋一看,似乎ASP用上函数这就算最终的完成了。因为主要的
程序功能做成了函数模块,需要在前台页面使用该功能时,直接调用一下,必要时修改下函数参数值就是一个完美的结局/。
那么,ASP中怎么又引入了类?这类是什么?又是如何应用?
在ASP的脚本语言中,VBscript里有个Class关键字,用它可来声明一个自定义类。比如
Class name
statements
End Class
这里statements里可以声明公有或私有的成员,包括函数、成员和属性。
而Javascript则是用一个函数来“声明”类,然后在该函数里通过 this.prototype 定义属性,this.func 定义方法。这里有一篇看看。
哪个简单拣哪个。在定义了 类也就是 class 的名称 name 后,这里面可以做些什么东西呢?
第一个。MSDN文档:在 Visual Basic 6.0 中,在创建和毁坏类模块时,类模块使用 Initialize 和 Terminate 事件来执行所有必要的操作。当在 New 语句之后第一次遇到对象时,会引发 Initialize 事件,当释放对象的最后一个引用时,会立即引发 Terminate 事件。但是,可在执行期间随时直接调用这些事件