WebForm:毒药还是利器?
三、Webform的限制与局限浅析
“微软技术难学”论
如今,网上有不少朋友大声疾呼:ASP.NET技术难学!
从本人十几年的微软技术学习体验来看,学习微软技术的确有种先易后难的感觉。原因很简单。对于一些初级的、通用的问题,微软通过层层包装,给出了简单的实现方法,使用户能立即获得新鲜的体验。但是,对于一些较有深度的问题,则需要我们自己揭开“包装”,深入理解原理后方可找到解决方法。这一点,相信有VC经验的朋友最有体会—VC给予了程序员几乎控制任何WIN32 API的能力,但是自身实现的仅仅是“灰色”的界面,但又有谁会否认VC的强大威力呢?
因此,对于新手在学习ASP.NET的初期,最容易产生“简单”的错觉—一系列的向导与拖动,再加上所谓“智能感知”,几分钟时间就让你倾倒。但是,稍后,你应该会立即悟到:这样的产品决不可能立即应用于实战环境!
试想一下:其它开发工具不是如此吗?都是如此!而每一项技能的学习又何止不是如此?
ASP.NET,作为WEB开发的一项技术,以其大量的服务器控件对客户端HTML作出了完美的包装,特别是类似于桌面应用中的面向对象、事件机制及Web窗体的引入,使初学者,特别是以前是桌面应用的开发者一下为之吸引。对于基本的开发需要,几乎应有尽有;但当你需要“工具箱之外的控件”时,你很可能还要学习C#,DOM API和JavaScript。这并不出乎意料,因为微软不可能发明一种统一的方法来解决所有复杂的问题。
从另一角度,我们也不妨问一下:什么技术威力无比又易于学习?是Java,PHP+MySQL,还是Ruby?恐怕都不是。就基于Java平台的Web开发而言,想开发出满意的产品,没有深入理解Java API、各种高级开发框架(如Struts、JSF等)、大量数据库技术、DOM API编程,肯定行不通。很简单,这是因为任何基于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元素、DOM API、JavaScript编程、CSS)的各种相关技术有一定了解。特别是对于HTML元素、DOM API、JavaScript编程、CSS这些内容基础中的最基础者,必须熟用自如。这些东西仅用三年左右的工夫是很难达到熟练掌握的。在团体开发环境下,对于以上技术,我们只能从中把握重点,最终达到各个击破。
关于“无刷新视图跳转的局限性”
关于这一点,我不想浪费过多的篇幅。因为ASP.NET 2.0的创建之初并没有预料到稍后的“AJAX”热潮的兴起,所以,它仅在非常必要的地方引入并支持“无刷新视图跳转”(即“页面局部刷新”)功能。要实现这一点,要求开发人员深入理解ASP.NET页面回寄机制,并且掌握JavaScript编程技术,然后借助于ASP.NET 2.0中提供的System.Web.UI.ICallbackEventHandler、Page.ClientScript.RegisterClientScriptBlock等实现所谓“AJAX”的局部更新效果。但如今,借助于ASP.NET AJAX 1.0框架,主要通过其中的服务器控件UpdatePanel的简单操作即可轻易实现这一目标。
0
相关文章