-
asp.net教程之窗体和功能性的关系与面向对象网络
现今的网络技术的发展目标之一就是要达到窗体和功能性的分离。六七年之前,这并不是一件难事,浏览器会提交一个浏览网页的请求信息,服务器发出需要的网页后,通过浏览器对其进行解析,选取需要的图像文件,这之后,HTML格式的代码就变成了版面形式或网页内容。现在,几乎所有的网页都有一些功能性的行为包含在里面。
在网络从提供静态的内容到成为一个交互式的应用平台的演变过程中,直到我们有了意大利面条式代码之前,窗体和功能性一直被混合在一起。类似于Java Server Page (JSP)和ASP.NET这样的技术可以消除这种混合,但是一个ASP开发者要使网页实现更高的合成化并可以重复使用,还需要做很多工作。
在纪录中,当窗体和功能性注定要在对象(由于没有更恰当的词汇,我们姑且称其为对象)中结合在一起时,将二者混合起来就并不是一件坏事,而且还要尽可能的依赖于以编译的代码。如果在一个网页中存在并不依赖于其内部对象的一些功能时,将他们放置在一个动态连接库(DLL)之中并通过DLL而不是脚本来调用这些功能。如果你在Microsoft Transaction Server或Component Services中建立这个DLL时,确保Retain In Memory这个选项已经设置,这可以保证对象在需要时可以很快地被调用。 如果你在服务器端使用IIS 5,你就要考虑将include指令(<!-- #include . . . -->)用Server.Execute方法代替。这个方法的性能也许并不如include指令,但是当代码路径没有被执行时他可以避免再次加载网页。要指出的是,include指令首先通过Ssinc.dll ISAPI filter进行处理,而且只有在通过处理所有的include指令而得到一个复合型网页之后,这个网页才会被提交到ASP引擎进行脚本指令处理。而Server.Execute也可以达到同样的效果,他可以在代码指令行没有被执行时,避免出现二次调用网页的现象。
同时,设法将网页的一些内容压缩封装入所谓的"pseudo-controls"之中。你可以使用VBScript (Class. . .End Class)或JavaScript在服务器上建构快速而简易的道具和方法使用对象。你要考虑使用这些对象将一部分内容进行压缩并提供一个针对HTML的解析方法。例如,我们可以假设一个VBScript Class用下面的方法来定义LoginControl,下面的代码将会在网页上输出一个注册对话框:
Dim ctlLogin
Set ctlLogin = New LoginControl
If Not ctlLogin.IsLoggedIn Then
ctlLogin.LoadData Request.Form("Username"),
Request.Form("Password")
ctlLogin.ProcessData
Request.ServerVariables("REQUEST_METHOD")
End If
ctlLogin.Render
Set ctlLogin = Nothing
最后,不要忽视客户机端的脚本指令控制复杂的动态的功能性函数的能力。现在市售的所有主要的浏览器都支持客户机端的JavaScript,但不幸的是,有时不同浏览器的不同执行方式使得他成为一件让人头疼的事,但同时大多数浏览器都给你设置一个将客户机端的JavaScript关闭的选项。尽管如此,只要你仔细考虑到诸多因素,他将成为一个有力的工具。
这些技术将会帮助你更好地在ASP.NET进行面向对象的网络开发工作。他使我们看到在大多数网页中,在保留每个个体部分的功能性的同时,有多少部分的内容可以被压缩并与其他部分相隔离。
在网络从提供静态的内容到成为一个交互式的应用平台的演变过程中,直到我们有了意大利面条式代码之前,窗体和功能性一直被混合在一起。类似于Java Server Page (JSP)和ASP.NET这样的技术可以消除这种混合,但是一个ASP开发者要使网页实现更高的合成化并可以重复使用,还需要做很多工作。
在纪录中,当窗体和功能性注定要在对象(由于没有更恰当的词汇,我们姑且称其为对象)中结合在一起时,将二者混合起来就并不是一件坏事,而且还要尽可能的依赖于以编译的代码。如果在一个网页中存在并不依赖于其内部对象的一些功能时,将他们放置在一个动态连接库(DLL)之中并通过DLL而不是脚本来调用这些功能。如果你在Microsoft Transaction Server或Component Services中建立这个DLL时,确保Retain In Memory这个选项已经设置,这可以保证对象在需要时可以很快地被调用。 如果你在服务器端使用IIS 5,你就要考虑将include指令(<!-- #include . . . -->)用Server.Execute方法代替。这个方法的性能也许并不如include指令,但是当代码路径没有被执行时他可以避免再次加载网页。要指出的是,include指令首先通过Ssinc.dll ISAPI filter进行处理,而且只有在通过处理所有的include指令而得到一个复合型网页之后,这个网页才会被提交到ASP引擎进行脚本指令处理。而Server.Execute也可以达到同样的效果,他可以在代码指令行没有被执行时,避免出现二次调用网页的现象。
同时,设法将网页的一些内容压缩封装入所谓的"pseudo-controls"之中。你可以使用VBScript (Class. . .End Class)或JavaScript在服务器上建构快速而简易的道具和方法使用对象。你要考虑使用这些对象将一部分内容进行压缩并提供一个针对HTML的解析方法。例如,我们可以假设一个VBScript Class用下面的方法来定义LoginControl,下面的代码将会在网页上输出一个注册对话框:
Dim ctlLogin
Set ctlLogin = New LoginControl
If Not ctlLogin.IsLoggedIn Then
ctlLogin.LoadData Request.Form("Username"),
Request.Form("Password")
ctlLogin.ProcessData
Request.ServerVariables("REQUEST_METHOD")
End If
ctlLogin.Render
Set ctlLogin = Nothing
最后,不要忽视客户机端的脚本指令控制复杂的动态的功能性函数的能力。现在市售的所有主要的浏览器都支持客户机端的JavaScript,但不幸的是,有时不同浏览器的不同执行方式使得他成为一件让人头疼的事,但同时大多数浏览器都给你设置一个将客户机端的JavaScript关闭的选项。尽管如此,只要你仔细考虑到诸多因素,他将成为一个有力的工具。
这些技术将会帮助你更好地在ASP.NET进行面向对象的网络开发工作。他使我们看到在大多数网页中,在保留每个个体部分的功能性的同时,有多少部分的内容可以被压缩并与其他部分相隔离。
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式