|
全面实现面向对象开发网站传说中,MS Visual
Studio6.0套件威力无比、魅力无穷。初见之时,不禁暗呼:“好大的块头,如何驾驭得了?”。是啊,由Visual C++6.0、Visual
Basic6.0、Visual J++6.0、Visual FoxPro6.0、Visual InterDev6.0五大开发工具软件组成的Visual
Studio6.0,安装光碟有七、八张之巨。望着它,就象一个学员第一次走进布满仪表的飞机驾仓:“该按哪一个钮好呢?”随着对它逐渐地熟悉和了解,才发现它高深莫测的外表下其实包藏着一颗平易近人的心----面向对象、可视化编程和基于组件的解决方案极大地方便了我们在Windows
DNA架构上建立多层解决方案的所有应用,包括创建交叉平台的Web应用程序,以及基于应用程序的C/S(客户机/服务器)Windows操作系统。
如果再细看这五大开发工具,你会发现很多熟悉的面孔:VC++,VB,VFP等。其实,开发基于组件的软件是现在软件开发的基础。微软把Windows应用程序的开发都基于它的组件对象模型(COM)上。COM/DCOM是一个独立于语言的对象模型,它能定义许多类型的服务,包括支持分布式对象和标准的服务接口。从这个意义上,我们可把这些开发工具分成两类:一类Visual
C++6.0、Visual Basic6.0、Visual J++6.0和Visual
FoxPro6.0是用以创建和使用COM组件的;而另一类Visual
InterDev提供了一个集成化的开发环境,在网站开发中,专门负责“装配”各种组件成为解决方案的。所以,只要掌握了Visual
InterDev6.0就掌握了Visual Studio6.0的精髓,如果能再精通一门VB、VC或J++,则在面向对象的网站开发中就能无往而不利了。
虽然,最让Visual InterDev6.0得意的是它基于COM的集成化开发环境,但我觉得只有贯穿整个Visual
Studio6.0的“面向对象”理念才是它真正的灵魂。特别是具有创新意义的网页对象概念提出了一种网页间共享数据的新方法,更让我们不得不佩服微软工程师们的智慧。
传统的网页对象是建立在Document Object
Model(文挡对象模型)基础之上的。一张网页(注意,是一张)中的每一个HTML标记都可看成是一个对象。每一个标记都有一个标识符、一些方法和属性。一张网页中最高级的节点是“document”对象(在DHTML中,还有“window”对象比它更高一级),它代表某整个网页页面。我们很早就在Javascript语言中运用,都很熟悉,在此就不再赘述。
但我们发现,这种网页对象是专给客户端的浏览器设计的,它所有功能的实现只能在一张单独?
页内打转。当越来越多的应用在服务器端完成的时候,一种新的基于服务器端和客户端(以下都以基于服务器端平台为例来介绍)的网页对象思想被微软提了出来。其中一种就是Microsoft
Scripting Component(脚本小程序)。大家可用“Scriptlet
Wizard”创建(如果在DHTML中,则可创建一个JavaScript的“Public_description”对象或使用默认的界面说明来显露网页对象中的属性和方法)。这里因为篇幅关系,就不再详述了。
另一种也是我想特别介绍的就是在Scripting Object
Model(脚本对象模型)中的网页对象概念。它把网站内所有的ASP或HTML网页通过用户指定而看成一个一个的网页对象。如果用户在其网页中的服务器端脚本中组织了一些子程序和函数,那么用户就可以把这些子程序以及函数称为该网页对象的方法。这样,某网页不必传送隐含变量或者查询字符串至另外一个网页就可以十分便利地执行该页面中的特殊脚本了。
网页对象简单的看就是对一个Designed-Time
Controls(设计时控件):PageObject的运用。下面我想通过一个实例,分别用传统的方法和面向对象的方法实现,来对比说明网页对象概念的实际应用。我们准备实现这样一个功能:在一张网页Caller.asp中显示另一张网页Callme.asp中的数据。
一、 传统方法:
第一步:打开任何文本编辑器比如Windows的记事本,新建一文件Callme.asp。
第二步:在此文件中输入如下VBScript脚本代码:
$#@60;%Sub TestResponse.Write“嗨,我是一个测试过程”
End Sub%$#@62;此Test过程在网页上显示“嗨,我是一个测试过程”第三步:再新建一文件Caller.asp。
第四步:在此文件中输入如下VBScript脚本代码:
$#@60;!--#include file="adovbs.inc" --$#@62;$#@60;!--#include
file="Callme.asp" --$#@62;$#@60;% Test
%$#@62;其中,adovbs.inc是一个头文件,定义了一些常量。$#@60;!--#include file="Callme.asp"
--$#@62;语句让本网页可以调用Callme.asp中的过程和函数。Test语句调用了Callme.asp网页中已定义好的过程。凡是用C语言编过程的人都应该很熟悉这一方法。
第五步:在浏览器中打开Caller.asp网页,你会看到此网页调用了Callme.asp网页中的过程Test,在Caller.asp网页上显示“嗨,我是一个测试过程。”二、
网页对象方法:
如果我们把上述的两张网页都分别设成网页对象,那么,在Callme.asp网页中的Test函数就会成为Callme网页对象的一个方法。这样,我们就能在其它网页中很方便的调用这个网页对象中的属性(变量)和方法(函数)了。如下:
第一步:在Visual InterDev的开发环境中创建一个新工程project1,然后在工程中创建一新ASP网页Callme.asp。
第二步:在网页的空白处单击鼠标右键,选Script Block |
Server,然后在$#@60;Script$#@62;和$#@60;/Script$#@62;标签之间填入下面VBScript脚本(创建一名为Test的过程):
Sub Test
Response.Write“嗨,我是一测试方法。”End Sub第三步:从左手边的Design-Time
Controls工具栏中拖PageObect控件到网页中,系统会自动弹出对话框问是否选择脚本对象模型(Object control
model)。选Yes。设置该网页对象名为Callme。
第四步:鼠标右击该控件,从弹出的菜单中选Properties。
第五步:从弹出的Properties窗口中选Methods标签页,在Navigate
methods列表框中选Test过程,然后关闭此窗口。这里,Test过程就被定义为该网页对象的一个Navigate方法。如图:
第六步:再在Project1工程中创建一新ASP网页Caller.asp。
第七步:拖PageObject控件到新网页中并用鼠标右击该控件设置其Properties。
第八步:从弹出的Properties窗口中选References标签页,点击ellipsis(…)按钮,选前面已创建的asp文件Callme.asp。
第九步:现在,我们就可以在Caller.asp网页中调用Callme.asp网页中的方法了。选中Script
Outline窗口,再鼠标双击Client Object Events中的document的onclick事件,在Source页中会自动出现function
document_onclick(),再在{}之间填入下面VBScript脚本:
callme.navigate.Test()此脚本是一个客户端的函数,调用了Callme网页对象。此对象就是第四步中把Callme.asp指定为Callme对象的网页对象。
第十步:在浏览器中打开Caller.asp网页,鼠标单击页面的任意空白处,你会看到此网页调用了Callme网页对象中的方法Test,在Caller.asp网页上显示“嗨,我是一个测试方法。”
上面两种方法实现了类似的功能,但前种方法还是沿用结构化编程时代的编程思想:通过调用文件中的函数来实现,几乎就是C语言;而后种方法通过把网页指定为网页对象,然后调用该对象的方法来实现(令人惊奇的是,我们能在客户端调用服务器端的任一网页对象的方法)。这是完全符合现代面向对象和可视化编程的思想的。虽然,后一种方法的实现看起来好象还麻烦些,但只开发小型网站是这样,如果开发大型网站或一些复杂的数据库应用如电子商务,你就会深刻地体会到网页对象以及面向对象的编程方法的妙处了。
由于篇幅关系,其它一些网页对象特性我就不一一详细介绍了,大家可参考电子工业出版社出版的《轻松掌握Visual
InterDev6》中第248页到252页。如需一些复杂的实例,比如利用网页对象实现在BBS中常用的“主--明细表”的方法,可与笔者联系(lueyi@21cn.com)。
参考文献:
1.《轻松掌握Visual InterDev 6》[美]L.Michael Van Hoozer,Jr.著电子工业出版社 2.《Visual
InterDev 6网络开发宝典》Richard Mansfield Debbie
Revette著人民邮电出版社以下三篇文章来自微软网站:http://www.mircosoft.com/vinterdev/ 3.“The
Visual InterDev 6 Data Environment Object”by Ian Blackburn 4.“Displaying
Information in Sequential Pages with Visual InterDev”by Mike Pope 5.“The
Visual InterDev 6_0 Scripting Object Model Event Sequence”by Steve
Millet
|