WebForm:毒药还是利器?
一、Webform的诞生及运行机制,web开发带来的革命性变化
九十年代中期,Internet崭露头角。为了进军Web应用程序行业,微软开发了Active ServerPages(ASP)。ASP是开发Web页面的一种快速、简便的方式。ASP页面由一个页面组成,其中包含了标记和语言的混合。ASP的强大之处在于,在页面发送给终端用户的Web浏览器之前,可以在页面上包含在Web服务器上执行的VBScript或JScript代码指令。这是创建动态Web页面的一种简单方式,动态Web页面可以根据开发人员规定的参数进行定制。
随着时间的推移,ASP页面上需要放置越来越多的HTML、VBScript、JScript、层叠样式表、T-SQL等内容。在这种情况下,页面很难管理。于是,ASP进一步深化推出了新版本的ASP 2.0和ASP3.0。在2000年夏,微软发布了其测试版本的ASP+,其主要目的是以面向对象的方式创建Web应用程序。后来重新命名为ASP.NET(与.NET框架1.0的最终版本一起发布)。
在引入.NET之前,传统ASP提供的模型和VisualBasic中开发的模型大相径庭,很少有VB开发人员能开发Web应用程序,Web应用程序开发人员也不能开发VB的胖客户应用程序。ASP.NET为此鸿沟之间搭起了一架桥梁。从此,ASP.NET把VisualBasic样式的事件模型带入Web应用程序开发领域,为无状态的HTTP提供了迫切需要的状态管理技术。其模型非常类似于早期的VisualBasic模型,因为开发人员可以把控件拖放到设计界面或窗体上,处理控件的属性,甚至处理控件的代码,操作在控件的生存周期内发生的一些事件。ASP.NET真正综合了这两个模型的优点。
ASP.NET是一个Web开发平台,它提供了构建企业级应用所需要的服务、编程模型和软件基础结构。ASP.NET应用是一些已编译的代码部件,由一些可重用且可扩展的组件组成,可以用第一类语言(包括C#、VisualBasic.NET、JScript.NET和J#)创建,并且可以访问.NET框架中整个类的层次结构。虽然ASP.NET的语法基本上与其前辈ASP兼容,但是ASP.NET是一个全新的编程框架,旨在用于快速开发Web应用程序。作为微软.NET平台的一个基础组成部分,ASP.NET提供了一种基于组件的、可扩展的且易于使用的方法,用以构建、部署和运行供所有在浏览器或移动设备中使用的Web应用。
同ASP和其它Web开发环境一样,ASP.NET也是建立在HTTP协议之上的,它利用HTTP命令和策略建立双向的、浏览器到服务器的通信和协作。真正使ASP.NET有别于其它Web开发技术的是它提出的抽象编程模型,即“Web窗体结构”。下图1展示了传统Windows窗体模型与.NET框架中Web窗体模型的简单比较。
图1—传统Windows窗体模型与.NET框架中Web窗体模型的简单比较
Windows窗体模型起源于典型的事件驱动的桌面编程风格。不管客户和服务器组件之间存在什么样的连接,服务器的工作总是响 应客户的输入。服务器知道总的应用程序状态,并以一种两层的、连接的方式进行运行。Web窗体模型则需要某种机构来支持这种事件驱动的编程模型。在上图中,请求页面时发生的状态反序列化和生成HTML响应时执行的状态序列化代表了这种需求的机制。
ASP.NETHTTP运行库负责这种筛选工作。HTTP运行库中一段代码,扩展了托管Web服务器的总体功能并使它们专门化。可重入窗体和隐藏字段是用来实现这种特征的低级工具。如果没有一个跨越服务器页面全部内容的有效的后端对象模型,那么这种模型的效果很难成功。因此,组件模型对整个ASP.NET开发平台的构建及其有效的工作很重要。
总之,ASP.NET是过去十年内先后发展起来的Web开发技术的巅峰—一种在目前构建通过HTTP协议传输的分布式应用的技术中,Web开发技术建立在另一种技术的基础之上,并且每一种技术都弥补了其前辈的缺陷。因此,ASP.NET是目前最先进、特征最丰富而且功能最强大的平台。
二、WebForm能够完全胜任企业软件的开发么?
在Webform出现之前,微软力推的一个重要架构是Windows DNA,即“Windows分布式因特网应用体系”。可以说,它是在.NET平台出现之前在微软平台上进行技术开发的大环境,其目的主要是为了全面集成微软的“旧有”组件技术OLE、COM、DCOM、MTS、COM+进行企业级开发。Windows DNA是第一个将互联网、客户/服务器和用于计算的PC模型结合并集成在一起的为新一代分布式计算方案而设计的应用软件体系结构。使用Windows DNA模型,用户可建造一个能在任何网络上实现的、可伸缩的多层应用软件。简言之,Windows DNA实际上是微软的.NET框架出现以前基于组件的分布式应用程序战略框架结构。
.NET是微软自从发布Windows 3.0以来最为激动人心的新技术,是微软战略上为下一个十年对服务器和桌面软件工程的第一步,可谓微软的一场世纪大豪赌。对于.NET,微软的定义是,“用于构架、配置、运行网络服务及其他应用程序的开发环境。该平台包括三个主要部分:公共语言运行时、框架类和ASP.NET。”
ASP.NET2.0的第一个主要目标是提高现有开发人员的效率,即“去除ASP.NET中原来需要的大量繁琐的编码,使常见的ASP.NET任务更容易完成。”他们的目标是“去年ASP.NET应用程序需要的2/3代码量!”在该版本中,这个目标已基本实现。
ASP.NET2.0的第二个主要目标是简化管理。ASP.NET2.0包含了一个MMC插件和一个新的基于Web的管理工具,从而使网站管理人员可以轻松地管理ASP.NET2.0应用程序。而且,开发人员可以轻松地实现对系统涉及的重要配置文件的各个部分的加密。
ASP.NET2.0的第三个主要目标是提供世界上最快的Web应用程序服务器。ASP.NET中最激动人心的性能改进之一是为了利用SQL Server2005而新增的高速缓存功能。ASP.NET2.0中包含了一个名为“禁用SQL高速缓存”,从而可以使终端用户将总是看到最新的结果集,显示的数据永远都没有过期。ASP.NET的另一个很大的领域是性能和可伸缩性。ASP.NET2.0提供了64位支持。于是,现在可以在64位的Intel或AMD处理器上运行ASP.NET应用程序。ASP.NET完全兼容ASP.NET1.0和1.1,可以在.NET 2.0框架上打开以前的ASP.NET程序,重新编译,并在64位处理器上运行它们。
另外,值得注意的是,SQL Server作为数据管理分析平台和数据库开发工具,在企业开发领域一直具有很好的口碑。同Visual Studio2005一同推出的SQL Server 2005是一套全新的管理工具包,它能够与Visual Studio 2005紧密集成,为ASP.NET2.0应用程序开发提供全方位的数据支持,其最突出的三大优点是:商务智能、可编程性和安全性。当然,ASP.NET2.0也提供了对于其它大型数据库的良好支持。
实践方面,从国内到国外已经有数不清的企业和政府机构选择了基于ASP.NET平台进行网站开发。在此,毋须我们再费口舌列举相关的著名案例。但是,另一方面,还应看到,ASP.NET2.0平台对于国内许多开发人员来说还是新事件,要掌握这个框架本身绝不会是经过1-2个工程所能把握的。因此,现阶段无论从国内还是国外来看,都存在一个从传统ASP、ASP.NET 1.0/1.1既有工程向ASP.NET 2.0转换的过程,而且这一过程也不是短期内所能实现的,但这是大势所趋。
此外,我们后面将会详细讨论的ASP.NET AJAX框架和Silverlight技术为新一代Web 2.0应用程序开发中胖客户端的开发提供良好的支持,它们将与以服务器端技术为主的ASP.NET 2.0架构相互补充,珠联璧合,并最终整合到一起。
三、Webform的限制与局限浅析
“微软技术难学”论
如今,网上有不少朋友大声疾呼:ASP.NET技术难学!
从本人十几年的微软技术学习体验来看,学习微软技术的确有种先易后难的感觉。原因很简单。对于一些初级的、通用的问题,微软通过层层包装,给出了简单的实现方法,使用户能立即获得新鲜的体验。但是,对于一些较有深度的问题,则需要我们自己揭开“包装”,深入理解原理后方可找到解决方法。这一点,相信有VC经验的朋友最有体会—VC给予了程序员几乎控制任何WIN32 API的能力,但是自身实现的仅仅是“灰色”的界面,但又有谁会否认VC的强大威力呢?
因此,对于新手在学习ASP.NET的初期,最容易产生“简单”的错觉—一系列的向导与拖动,再加上所谓“智能感知”,几分钟时间就让你倾倒。但是,稍后,你应该会立即悟到:这样的产品决不可能立即应用于实战环境!
试想一下:其它开发工具不是如此吗?都是如此!而每一项技能的学习又何止不是如此?
ASP.NET,作为WEB开发的一项技术,以其大量的服务器控件对客户端HTML作出了完美的包装,特别是类似于桌面应用中的面向对象、事件机制及Web窗体的引入,使初学者,特别是以前是桌面应用的开发者一下为之吸引。对于基本的开发需要,几乎应有尽有;但当你需要“工具箱之外的控件”时,你很可能还要学习C#,DOMAPI和JavaScript。这并不出乎意料,因为微软不可能发明一种统一的方法来解决所有复杂的问题。
从另一角度,我们也不妨问一下:什么技术威力无比又易于学习?是Java,PHP+MySQL,还是Ruby?恐怕都不是。就基于Java平台的Web开发而言,想开发出满意的产品,没有深入理解Java API、各种高级开发框架(如Struts、JSF等)、大量数据库技术、DOMAPI编程,肯定行不通。很简单,这是因为任何基于Web平台的开发都要涉及大量相关技术。
关于webform的局限性
本人不是ASP.NET高手,不敢妄加评论和指责。但是,我们知道任何一个技术都有其自身的弱点。好的技术应该在推广自身的同时也一并提供这些弱点的解决方案。我们所熟知的“插件”技术正是这样—我的精力有限,给你一个Toolkit,让你自己去拓展!我认为在这一点,ASP.NET对于服务器定制Web控件的支持正是如此。
webform有它自身的弱点,但它同时也为我们提供了更大的自由—在必要的时候,我们完全可以自己使用JS/HTML/CSS等实现自己的定制功能。说到底,webform也只不过是微软提供的期望能够提高一点点开发效率的工具,万不可以当成是web开发的全部,甚至它都不是主要的方面。
某君在国内某著名论坛上提出如下针对ASP.NET的质疑:
“……你不能用js改变控件相对应的dom结构,否则postback后还原viewstate的过程中会出错; 你没办法给webform控件生成的html tag加控件不支持的attributte,又得回后台在Page_Load control.Attributes.Add();
如果你想使用ajax的话,一堆陷阱在等着你……
你也别指望webform能为你的Ajax.Updater返回一个视图的片段。因为你并没有办法完全控制webform控件会生成什么东西给你。
不要跟我说还有Ajax.Net之类的东西,或许这是唯一的办法……
webform入门的学习成本是比较低,但是精通webform比精通js+xhtml+css难多了。更郁闷的是,就算你精通了webform,你用它还是会有很多事情做不了,最终还是要靠js,html,codebehind代码杂交,迁就着webform的特性,兜一个大圈去实现功能。webform纯粹是忽悠,用来忽悠winform程序员转到asp.net平台的!……”
对于此观点与疑问,我们没有必要再加评论,但是任何具有ASP.NET三年以上专门开发经验(特别是以前具有ASP开发经验者)者应该很快提出自己的看法与解决方案。
【强烈建议】与桌面应用相比,显然Web应用更为复杂。除了与传统桌面应用开发相类似环境的要求之处,还要求开发人员对从服务器技术(.NET框架、框架语言、大型数据库技术等)到浏览器端(各种主流浏览器架构及区别、HTML元素、DOMAPI、JavaScript编程、CSS)的各种相关技术有一定了解。特别是对于HTML元素、DOMAPI、JavaScript编程、CSS这些内容基础中的最基础者,必须熟用自如。这些东西仅用三年左右的工夫是很难达到熟练掌握的。在团体开发环境下,对于以上技术,我们只能从中把握重点,最终达到各个击破。
关于“无刷新视图跳转的局限性”
关于这一点,我不想浪费过多的篇幅。因为ASP.NET2.0的创建之初并没有预料到稍后的“AJAX”热潮的兴起,所以,它仅在非常必要的地方引入并支持“无刷新视图跳转”(即“页面局部刷新”)功能。要实现这一点,要求开发人员深入理解ASP.NET页面回寄机制,并且掌握JavaScript编程技术,然后借助于ASP.NET2.0中提供的System.Web.UI.ICallbackEventHandler、Page.ClientScript.RegisterClientScriptBlock等实现所谓“AJAX”的局部更新效果。但如今,借助于ASP.NET AJAX 1.0框架,主要通过其中的服务器控件UpdatePanel的简单操作即可轻易实现这一目标。
四、WebForm究竟是利器还是毒药?
关于“WebForm究竟是利器还是毒药”的争论,我想大家很可能会联想起国际上关于“核武器”的争论。原子能,作为一种新的能量形式,就其本身是无法定论究竟它是造福人类的利剑还是灭绝人类的武器的,关键在于看其主人如何使用它。显然,ASP.NET技术中推出的WebForm理论以其类似传统桌面Windows应用的操作技术很快深入人心。但是,我们更要清醒地认识到,选择.NET+ASP.NET2.0平台进行Web开发是一个系统的工程,绝不可以是一、两年时间所能精通的,因为Web开发涉及服务器端诸多.NET编程技术,还要与浏览器端众多琐细的技术相纠缠。所以,单纯掌握一个WebForm是无济于事的。
对于那些急于成事者,特别是新手,往往为WebForm的表面易操作性所迷惑,而当投身于实战环境时才感觉一头雾水,茫然不知所措。也难怪有些人把WebForm斥责为“毒药”—“……迁就着webform的特性,兜一个大圈去实现功能。webform纯粹是忽悠,用来忽悠winform程序员转到asp.net平台的……”—“害人匪浅”。WebForm带给人们的这种错觉,我们不妨再对比以前桌面开发时代的VB6。这个软件可谓真正“RAD”工具,学习者可以在几小时,甚至几分钟内为之吸引,但是,真正使用VB6做起软件来,在很多情况下还要靠“手工”挖掘低层的WIN32API函数。但又有谁把VB6斥责为“毒药”呢?基于WebForm做Web开发与之很类似,都像是从顶层往下学习,但有些时候要往下挖掘的东西远不止一批WIN32 API函数的数量(不过难度上较之于WIN32 API相对容易)。相反,VC6一开始就给予我们从低层WIN32API函数编程的能力,而在实战环境下也主要是要求开发者具有从同一层次(即主要是从广度上)进行挖掘的能力。所以,也不可以仅凭此一点就断言VC6为“利器”。
另一方面,又有谁公然提出JAVA易学,或比较于.NET平台更易于掌握呢?其实,当我们对Web开发技术掌握到一定深度,往往都会有这样的体会:各种平台与方案表面上看各有千秋,但还是存在很大的共同之处。特别是在如今C#语言与JAVA存在极大相似之处的情况下,更易于得到这样的结论。
【补注】关于ASP.NET2.0中的ViewState的使用,不知诸君有何感想?ViewState可以说是整个ASP.NET在HTTP上实现其事件系统的基础。ASP.NET中引入ViewState的目的在于实现整个框架的灵活性,但与此同时也给多少开发人员带来难言的困惑。幸好,在一般情况下,仅利用ViewState的默认操作就可以满足我们的要求。
古诗云:十年磨一剑。我们也可以得出类似的结论:webform对于智者无疑是一把利刃,但对于浅尝辄止者也不亚于一付“毒药配方”。
五、抛开局限,如何合理协调利用webform?
基于上面的分析,我们看到:webform,如同任何其它技术一样,既有自身的局限性,也有高超之处。一旦我们在webform上花了一定的功夫,那么不妨继续“走下去”。
对于需要进一步改造的遗留项目(如以前基于ASP、ASP 1.0/1.1开发的项目),我们可以先改造最有把握的部分,尚不确定的部分暂时先不要做,等各种技术及条件成熟起来再作全面的改造。
对于想使用最新ASP.NET 2.0框架进行开发的项目,还是先使用最先掌握和最有把握的技术进行开发,也许在界面上或其它性能方面存在不尽人意的方面,但这要比把“不确定”和“无把握”留在“危险地带”更为安全。因为Web开发较之于桌面开发,安全往往是最应优先考虑的部分。其它方面,例如性能的改进,用户体验感的增强等则可以随着技术的不断成熟稳步推进。
对于时下“热门”的AJAX技术,也不妨冷眼观之,然后选最有把握者加以利用。
例如,对于微软的ASP.NET AJAX框架(以前称为“ATLAS”),其针对不同开发环境提供了三大类不同的解决方案。基于ASP.NET 2.0的项目完全可以在最开始选择以UpdatePanel服务器控件改造为主的方案以达到最安全和最快速地AJAX化你的Web项目,同时又能带给用户丰富的“实时”体验感。
六、展望微软未来web开发技术
从Windows DNA到.NET框架
.NET框架是微软公司继WindowsDNA以来的新的开发平台。基于这个新的框架,以前在DNA中暴露出来的缺陷基本得到全面解决。另一方面,.NET并没有完全抛弃WINDOWSDNA,实际上它是WINDOWSDNA的继续和发展。如今的.NET不仅有一套明确的技术规范,还提供了一系列的支持产品,例如编译器、类库甚至最终的用户程序。如Windows.NET是操作系统平台、.NET框架是运行环境、.NET企业服务器为产品服务器、Visual Studio.NET为编程平台。
.NET框架是以一种类似于Java系统的虚拟机方式运行和管理的编程平台,通过公共语言运行时刻为基础,支持多种语言(C#、VB.NET、C++、Python 等)的开发。下图2展示了.NET的整体框架结构。
图2—NET体系结构
.NET框架具有两个主要组件:公共语言运行库和.NET框架类库。公共语言运行库是.NET框架的基础。我们可以将运行库看作一个在执行时管理代码的代理,它提供内存管理、线程管理和远程处理等核心服务,并且还强制实施严格的类型安全以及可提高安全性和可靠性的其他形式的代码准确性。事实上,代码管理的概念是运行库的基本原则。以运行库为目标的代码称为托管代码,而不以运行库为目标的代码称为非托管代码。.NET框架的另一个主要组件是类库,它是一个综合性的面向对象的可重用类型集合,您可以使用它开发多种应用程序,这些应用程序包括传统的命令行或GUI应用程序,当然也包括基于ASP.NET所提供的最新的应用程序(如Web窗体和XML Web服务)。
.NET框架可由非托管组件承载,这些组件将公共语言运行库加载到它们的进程中并启动托管代码的执行,从而创建一个可以同时利用托管和非托管功能的软件环境。.NET框架不但提供若干个运行库宿主,而且还支持第三方运行库宿主的开发。
如今,与Windows Vista绑定发行的.NET框架3.0框架把侧重点放在了进一步拓宽.NET方案的应用范围上。下图3展示了.NET 3.0框架的栈式框架结构。
图3—NET 3.0框架结构
从总体来看,.NET 3.0框架并没有改进现有技术,而是引入了四种适应未来发展的基本新技术:Windows描述基础(WPF)、Windows通信基础(WCF)、Windows工作流基础(WWF)、Windows CardSpace(WCS)。
这其中的每一种技术都将成为开发者基于新一代操作系统及.NET平台用来实施新方案的基础。
其中,WPF无可争辩地成为四个新式基础类集中最为重要的。这主要是由于两点:一致性WPF方案;新式的名为XAML的XML标准编程语言。
首先,WPF为基于ASP.NET框架进行Web开发提供了一种一致的方案来构建编程模型,并且支持使用更为丰富的控件和设计技术来开发Windows程序。一个开发出来的单个WPF程序最终能够被发行到桌面、Web以及智能设备等多种环境下。
其次,WPF中创新性引入了一种名为XAML的XML标准编程语言。开发人员利用它能够控制对象的布局。后面我们提到的Silverlight技术正是基于这一标准开发而成的。从表面上看,这种技术似乎与Flash极为相似,其实二者之间还是存在相当的不同。Flash是一个成熟的、可控制的、独立于操作系统的封闭式框架。而相比之下,Silverlight允许你与操作系统及其它.NET框架技术进行集成。显然,Silverlight的出现很可能会对Flash构成极大的威胁。
在这个“网络即是一切”的社会里,Windows通信基础(WCF)显得极为重要。这个编程模型把web服务、.NET远程技术、分布式事务和消息队列统一到单个面向服务的编程模型中,从而实现真正意义上的分布式计算。
Windows工作流基础(WWF)是一种定义、执行和管理工作流的微软技术。工作流由一系列的活动组成;开发者能够编写他们自己的域特定的活动,然后把它们应用于工作流中。.NET框架3.0/Windows工作流基础还提供了一组涉及若干控制流构建方面的通用目的的活动。值得注意的是,这个框架了还包括了许多Visual Studio2005扩展(可视化工作流设计器、支持用户调试工作流的可视化调试器、工作流编译系统)。总之,借助于WWF,新一代应用程序开发过程的流程控制方面将得到极大的改善。
最后,Windows CardSpace(WCS)为程序开发中一直令人头疼的认证问题上提供了一种新的解决方案。WCS有望改变你到一个应用程序(基于Web、手机或桌面程序)的认证方式,从而极有助于保护用户的私有数据。
另外,LINQ(Language IntegratedQuery)项目也是一项值得关注的技术。它是一个为了能够让开发者更容易地访问数据的.Net框架工具集,是C#和VisualBasic语言集合的延伸。据微软人士析,这个项目将为查询XML、对象、相关数据和其它数据类型提供一个统一的程序设计模型。
即将登场的C#3.0也应引起我们的关注。这个项目中将进一步引入大量其他语言的特性,特别是完全的closure支持、泛型、var、linq等,这些都是动态语言之所以强过传统C++,Java,C#早期版本之处。界时,C#3.0将可作为全功能语言完全可以与PHP、Ruby等动态语言对抗,而且仍保持原有的编译期强类型的优势。
ASP.NET AJAX框架
随着互联网的迅速普及,人们对富客户端功能的需求日益迫切,特别是Jesse-JamesGarrett于2005初正式提出的“AJAX”的出现简直成为这一需求的强兴奋剂。具有讽刺意味的是,设计之初并没考虑到ASP.NET2.0在刚刚出世之后就陷入被淘汰的边缘。于是,微软于2005年夏天着手开发自己的代号为“ATLAS”的AJAX方案,并于2007年1月份正式推出并更名为ASP.NET AJAX 1.0,其官方支持网站为[url]http://ajax.asp.net[/url]。
ASP.NET AJAX的目标在于:
构建一套完整的Web用户体验框架—提供一组丰富的内置组件,并允许开发者方便地依照自己的需要加以扩展;因此,对于那些熟悉JavaScript脚本语言的开发者将极大地提高程序的可维护性和可重用性。
与ASP.NET 2.0编程模型有机集成—提供一种端对端的解决方案,使得MS AJAX应用程序能够非常容易地访问服务器端ASP.NET和.NET框架中现有的编程模型。
自由选择开发模型—实际开发中,开发人员可以根据需要选择以服务器端为中心还是以客户端为中心作为应用程序的基本开发模型。
完全跨平台并基于标准—兼容大多数浏览器和平台,它实现的MS AJAX脚本框架能够适用于任何流行的Web服务器。
零客户端安装—运行基于MS AJAX开发的应用程序时,不需要客户端安装任何内容。MS AJAX的“客户端”由一系列从浏览器下载到本地的JavaScript文件组成。
此外,MS AJAX框架还可以应用于PHP及ColdFusion等Web开发环境中。
从总体上看,整个ASP.NET AJAX框架被划分为如下三个模块:
1、ASP.NET AJAX。这一部分是ASP.NET AJAX框架的核心部分,包括了核心AJAX类型系统,网络协议层,组件模型,扩展器基类,以及与ASP.NET集成的服务器端功能。
2、ASP.NET AJAX CTP。ASP.NET AJAX社区支持的“增值”CTP部分,包括了以前各个AtlasCTP版本包含的,但并不在完全支持的“核心”1.0版本内的额外的高级特性。微软的最终目标是,通过用户进一步的试用与反馈,逐步将其中稳定的部分增加到核心模块中去。
3、ASP.NET AJAX Control Toolkit。包含了基于ASP.NET AJAX1.0版“核心”版本的大量(还在继续增加)的功能极强的免费AJAX控件。它是一个开源项目,由微软和非微软开发人员共同开发维护,主要支持站点是[url]http://www.CodePlex.com[/url]。
总的来看,MSAJAX的整体框架目前已经基本成熟,但是在许多方面还需要作进一步改进。然而,ASP.NETAJAX作为ASP.NET最重要的客户端补充框架的及时出现,使二者珠联璧合,相互辉映,从而使微软的Web解决方案上下贯通、趋于完美。由此不难想象,在ASP.NET的下一个版本正式出笼时ASP.NET AJAX将被正式吸收进去。
Silverlight技术
Silverlight最早亮相于2005年的秋季,当时它使用的还是开发代码“Windows Presentation FoundationEverywhere(WPF/e)”。今年4月,微软为其取了现在的“Silverlight”之名,接着在拉斯维加斯NAB展会上,正式高调发布这个新的跨平台网络媒体解决方案,又在稍晚的MIX07展会上对Silverlight进行详细介绍,并宣布了其开源的打算。当前最新版本为Microsoft Silverlight 1.1 Alpha。
Silverlight是一个跨浏览器、跨平台的插件,旨在为网络带来下一代基于.NET媒体体验和丰富的交互式应用程序。Silverlight为开发者提供灵活的编程模型(图4),支持AJAX,VB,C#,Python,Ruby等语言,并集成到现有的网络应用程序中。Silverlight可以对运行在Mac或Windows上的主流浏览器提供高质量视频信息的快速、低成本的传递。
图4—Silverlight框架简单示意图
如今的Silverlight能够与Flash一样作为浏览器插件工作,同样能显示矢量图形、动画和视频,可以运行在多种操作系统甚至移动设备上。于是,人们把其与Flash联系在一起、进行各种比较,甚至称其为Flash杀手。
一方面,Silverlight不仅支持高清晰的录像文件的展示,可以让中小开发者迅速而可靠地交付庞大和高清晰的视频而无需花费大量成本,并且在很多方面较之Flash有更佳的性能,比如与AJAX结合更紧密、更容易动态生成、开发工具集成度高等,而它比Flash更强的最关键原因在于,Silverlight应用程序是以一种叫做XAML的本文标识语言传递到浏览器的,当用户登录站点时不需要进行大量的数据交换传输。诸如Google之类的搜索引擎可以扫描抓取XAML,却无法对Flash应用程序有较好的抓取支持。
另一方面,在一个大量使用Flash的站点中,开发者和设计者往往需要花费额外的工作来使它们的站点对搜索引擎更加友好,但是实际的效果并不理想。于是,这些开发人员很可能会转向高性能、同样跨浏览器和平台、小成本并具有良好的继承工具支持的Silverlight。
此外,Flash使用的是ActionScript的脚本进行编程,而真正熟悉掌握这项技术的人员并不多。相比之下,数不胜数的精通VB,C#,Python等的程序员无需专门的学习就可以操控Silverlight。他们可以使用强大的Visual Studio codename“Orcas” Beta1中的Expression Studio进行轻松地设计、编译和发布Silverlight应用程序。
最后,还有一点值得我们关注的是:Silverlight以开源形式面向开发社团,必将大大促进Silverlight技术的发展与成熟。
小结
微软以其垄断技术曾经和正在“得罪”多少人?这一点上,优秀的轻量级Web开发动态语言“后起”之秀—Ruby也曾因出手于“帝国”而一度让众君敬而远之。但作为技术,轻率地贬低ASP.NET 2.0是毫无道理的。
ASP.NET2.0的确是划时代的优秀的重量级Web开发工具,当然它也决不会是仅凭“短短的几日”所能拿下的。因此想进入Web开发领域,对于工具的慎重选择也显得尤为重要,是仅满足于眼前需要,还是立足于长远,不可统一定论。但无论如何,如今局势已逐渐明朗:Web应用将一步步取代桌面应用并最终占为主流。
最后,因本人非ASP.NET老手,仅是凭借几段文字胡乱发表了一下自己就webform的一点意见。因此,如果惹烦了哪位,还请多多海涵。