|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
楼上说交互性不好,太牵强了吧。在微软提供的一套框架中,利用asp做网站,开发效率高,使用人数少,减少不必要的开销。交互性是互动方式,是有开发人员决定的。程序|系统跟着互连网使用的深切和开展,三层系统布局的使用形式也失掉更多人的喜爱。本文先容了三层布局使用程序的观点和长处,并分离一个实例先容了怎样创建三层布局的ASP使用程序。
1、两层布局的ASP使用有何弱点
在Browser/Server使用程序开辟范畴,微软公司的IIS/ASP以其壮大的功效,优秀的扩大才能,及与别的微软产物的分歧性,敏捷地盛行起来。它能使一个具有VB/VC履历的程序员,很快地成为一个Web程序员,开辟出看上往十分专业的使用。可是,ASP有一个生成的弱点,就是ASP代码和HTML代码是混在一同的,ASP程序员既必要思索与数据库打交道,必要体贴怎样与HTML共同,偶然还必要用ASP间接天生HTML代码。其了局是,当程序逻辑充足庞大时,.asp源文件十分长;并且,不管客户提出用户界面的改动,仍是贸易逻辑的改动(好比,在测验体系中,"及格"的尺度大概从到达60分就算及格,改成进进前100名才算及格),都必要对.asp文件举行修改,而贸易逻辑的改动,极可能必要修改良多文件。
2、三层布局的观点
在传统的Client/Server使用中,也存在着上述一样的成绩,多层布局的使用恰是在对C/S布局的总结基本上发生的,而且也已扩大到了B/S使用开辟范畴。行将使用分别为三层(能够有更多层,但三层最多见):用户界面层,贸易逻辑层,数据库层。用户界面层卖力处置用户的输出和向用户的输入,但其实不卖力注释其寄义(出于效力的思索,它大概在向上传输用户输出行进行正当性考证),这一层一般用前端工具(VB,VC,ASP等)开辟;贸易逻辑层是高低两层的纽带,它创建实践的数据库毗连,依据用户的哀求天生SQL语句检索或更新数据库,并把了局前往给客户端,这一层一般以静态链接库的情势存在并注册到服务器的注册簿(Registry)中,它与客户端通信的接口切合某一特定的组件尺度(如COM,CORBA),能够用任何撑持这类尺度的工具开辟;数据库层卖力实践的数据存储和检索。有了如许的布局,下面的成绩水到渠成:仍是以测验体系中的及格尺度为例,在客户端一切必要显现及格职员名单的中央,挪用如许一个函数GetQualifiedList,至于这个函数怎样编写,怎样与数据库打交道,以致会见的是何种数据库都与其有关(你必定有过如许的履历,在一种数据库体系上运转得很好的SQL语句,偶然换到另外一种数据库体系上必需加以修正);在两头层DLL中完成这个GetQualifiedList函数,假如用户对"及格"的界说变了,只必要修正这个函数就能够了,只需此函数的出口参数和前往内容稳定,在客户端不需作任何修改。在这里,我们看到了面向工具编程的特征之一封装性的长处,而这一点在开辟年夜型使用时特别有效--我们能够把开辟职员分红两组,一组卖力开辟界面层,另外一组卖力开辟贸易逻辑层,两边只需依照事前约定的函数接口,并行地开辟就能够,而不用向夙昔那样,前面的事情必需等后面的事情完成后才干入手下手。固然,如许的开辟形式必要很好的项目和谐和文档作撑持。
你大概会问,假如我把这些函数些在一个独自的文件中,再在必要挪用的中央把它包括出去,不是一样能到达目标吗?第一,这类办法效力不高,不管你把这些函数分离到几个文件中,当你必要挪用个中一个时,总会包括进一些实践上其实不必要的函数,这无疑减轻了服务器的包袱,对服务器功能请求较高的Web使用特别云云。而DLL只在必要时才调进内存且只调进必要的函数,而且多个使用程序实例能够共享统一个DLL实例;第二,假想一个员工,有20个属性(工号,姓名,岁数,性别......),如今给定某工号,请求前往此员工一切信息。此时假如纯真用函数,只能界说20个全局变量,在函数中改动这些变量值,大概界说一个有20个传参(byreference)参数的函数。明显,第一种办法很贫苦而一旦增添一个属性后一种办法就必要变动函数接口。而在一个工具里,既包括成员办法(即函数和历程),也包含成员属性。假如我们接纳工具的办法,则在函数中只必要改动工具的属性,在函数外能够间接援用改动了的工具属性值。这类办法有些相似第一种办法,但1.属性值无需在函数外一一申明;2.这些属性值只属于工具,与工具有关的代码不会偶然地改动属性值;3.一旦工具被开释,这些值会被一同开释。
3、怎样开辟三层布局的ASP使用程序
ASP具有优秀的扩大性,我们会见数据库时,接纳的时ADO工具,会见文件时,接纳的是文件体系工具(FSO),实在这时候程序已是三层布局的使用程序了,只不外因为是使用内置的工具而为意想到而已。这些工具都遵守COM/ActiveX接口,因而我们本人开辟的工具也要遵守这个接口。上面,我们就以上文提到的"及格"尺度为例,演示怎样创立本人的三层布局的ASP使用。
1、在数据库体系中创建以下数据库表:
Employee:EMPLIDchar(5)notnull,
Name char(10)notnull,
Genderchar(1)notnull,
Score intnotnull
此表存储员工信息和测验成就,为复杂起见,这里只包括工号,姓名和性别三项,而且只要一门测验,EMPLID为主键。
2、创建静态链接库
启动VB(这里以VB为例,你能够用你喜好的任何撑持ActiveX接口的开辟工具开辟),新建一工程,工程范例为ActiveXDLL。在工程中新建一个类,取名为Employee。你能够ClassBuilder可视化的向类中填加属性和办法,也能够间接手工编纂。起首填加EMPLID属性以下:
PrivatemsEMPLIDasstring
PropertyLetEMPLID(sEMPLIDasstring)
msEMPLID=sEMPLID
EndProperty
PropertyGetEMPLID()asstring
EMPLID=msEMPLID
EndProperty
一样平常地讲,每个属性都应当有PropertyLet和PropertyGet两个办法,它们分离当向属性赋值和读取属性值时被挪用。假如某个属性只被赋值而从不被读取(这类情形多产生在对应数据库表的主键的属性上),则PropertyGet办法能够省略。PropertyLet办法不克不及省略。你能够模仿下面的程序再创建Name,Gender和Score三个属性。然后创立以下办法:
PublicSubCreate(EMPLIDasstring)
dimconnasnewConnection
dimrsasnewRecordset
dimsqlasstring
SupposethatyoucreateaDSNinthecontrolpanel,theconnectionstringproperty
canalsobedsn-lessstring
conn.ConnectionString="dsn=dsnname;uid=username;password=pwd"
conn.open
sql="select*fromEmployeewhereEMPLID="&EMPLID&""
withrs
.opensql,conn,1,3
if.eofand.bofthen
exitsub
else
msEMPLID=trim(.Fields("EMPLID"))
msName=trim(.Fields("Name"))
msGender=trim(.Fields("Gender"))
msScore=.Fields("Score")
endif
.close
endwith
setrs=nothing
conn.close
setconn=nothing
EndSub
这里依据EMPLID创立Employee工具,注重数据库中的值是赋给三个公有变量,而不是间接赋值给属性,假如你单步伐试就会发明,给msEMPLID赋值会挪用PropertyLetEMPLID,也就是给属性赋值。
上面我们再创立一个类Employees,并填加以下办法:
privatecolQualifiedListasnewCollection
privatemnCurrentIndexasinteger
PublicSubGetQualifiedList()
dimconnasnewConnection
dimrsasnewRecordset
dimsqlasstring
Supposethatyou</p>由于ASP还是一种Script语言所没除了大量使用组件外,没有办法提高其工作效率。它必须面对即时编绎的时间考验,同时我们还不知其背后的组件会是一个什么样的状况; |
|