重用,优雅,灵活——乱弹Web Forms, Rails, CS.Chameleon

近一段时间来,不少人对RoR推崇备致,认为是最好的Web开发框架,顺带骂一声Web Forms的复杂性和过度封装。我对RoR也怀有谨慎(因为毕竟没有在现实项目中使用过)的好感,认为它在很多情况下确实能提高不少开发效率,但是如果说Web Forms与之相比一无是处,我却不能苟同。

至于原因,我认为有以下几点:
1, Web Forms提供的用控件封装相关联Html/Javascript/Css的功能是很多Web开发人员从Asp/Php时代就梦寐以求的。只要做好了一个控件,就可以极其方便地在任何项目的任何页面方便地使用它。RoR里似乎没有对应的东西吧,要想在不同的项目间重用View的代码,恐怕只有源码级的Copy & Paste & Edit | Debug这种方式吧?试想一个带分页,排序,选中,在线添加/编辑/删除记录的GridView控件;或是一个可以在线展开,折叠,添加删除节点的TreeView控件,在RoR里实现起来只怕很让人头疼;而在Web Forms里都有现在的控件——即使没有,我们也只需要做一次工作,把它写好,以后直接引用就可以了。

2,Web Forms不但封装了Render到客户端的各种代码,而且标准化了服务器端的代码执行流程,这样一来才有可能出现MagicAjax.Net这样只需要加上一个<AjaxPanel>就能轻松实现Ajax的功能库(是的我知道RoR里添加Ajax特性很简单,但RoR出现和Web Forms的诞生时间相差很远吧,后者在诞生时可没有专门为Ajax考虑过)。从理论上讲,如果以后如果有一天某个ML(比如XAML)取代了HTML,Web Forms能轻松地迁移到新的平台--因为控件封装了Render逻辑,只要这个改一下,大多数页面就能轻松地移植。与之对比,RoR在应对底层技术平台扩展/变迁能力恐怕就不如Web Forms了——至少还未经事实证实。

3,虽然理论上说对Http/Html/Javascript/Css...等技术所知不多的人是不应该做Web开发的,但事实上就像对客户的行业几乎完全不懂却在开发着行业专用软件的程序员一样,这样的人还是有不少的。Web Forms能让这一部分人更轻松地完成他们的任务,而不必先去恶补一年基础知识(而且我还稍微有点怀疑,懂得了上面所提的知识就能轻松使用RoR吗?虽然RoR的代码看起来很美,非常接近自然语言,但写起来会不会就困难了,因为我必须时刻思考着电脑能理解我的哪些自然语言)。VB之所以流行就是因为它能让你以最快的速度成为一个程序员——来完成你必须完成的任务。是的,当涉及到动态创建控件等高级主题时,Web Forms表现得很蹩脚,很不优雅,但是至少这些任务不是无法完成的,甚至你可以在这样的场合以ASP的方式使用Asp.net——毕竟Asp.net所包含的内涵远大于Web Forms。

4,因为Web Forms是隶属于Asp.net的一部分,所以我们使用它时就自动获得了Asp.Net带来的无数好处,比如统一、丰富而且非常易于扩展的类库,方便的部署,强大好用的IDE等。而且,最重要的是Asp.net允许你自定义HttpHandler,这意味着你在认为Web Forms不合适的场合,完全可以自行编写/采用第三方的Handler,比如MonoRail,这些不同的Handler完全可以在同一个项目里共存,各用所需,而且彼此可以方便地通信交流。在RoR里我不知道有没有这种机制——就我猜想,目前应该还没有吧。

5,Web Forms已经很成熟了,而RoR与之相比,还有很多地方需要等待改进,像全球化,常用功能的默认实现(比如Membership),开发环境,等等等等,毕竟微软有人有钱,花了五六年来完善一项技术,不是别人短时间内就能跟得上的。

总而言之,Web Forms的优势(或者说特点更合适一些)更就在于封装,重用。RoR的优势在于对于目前Web开发的需求照顾得比较周到,代码看起来比较优雅。

另外,不知道大家有没有注意过CS2007里的表现引擎Chamelone?它有点像网页模板,但是能根据上下文主动获取数据。比如一个包含在SectionList里的UserData控件将自动获取每个Section的第一个所有者;而如果把它放到ForumPost里,它将获取这个Post的Author。结合它的其它一些特性,我们几乎可以只开发一些Control,然后任何页面都不必写程序代码就可以显示任何数据——这意味着美工与编程两项工作的真正脱离!

posted on 2007-04-09 01:54  deerchao  阅读(3463)  评论(26编辑  收藏  举报