deerchao的blog

Be and aware who you are.

重用,优雅,灵活——乱弹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 阅读(2867) 评论(26)  编辑 收藏 网摘

评论

#1楼  2007-04-09 08:36 Agogo.Net [未注册用户]

看过留言   回复  引用    

#2楼  2007-04-09 08:42 yunhuasheng      

楼主说的有几分道理。   回复  引用  查看    

#3楼  2007-04-09 08:58 redmoon      

确实现在有些人喜欢跟风,说RoR好就都说它好。任何东西都有两面性,WebForm有缺点,但是优点也是明显。   回复  引用  查看    

#4楼  2007-04-09 09:00 kiler      

Web Form适合做企业级开发,RoR适合做网站。   回复  引用  查看    

#5楼  2007-04-09 09:28 Jeffrey Zhao      

@kiler
这说法不是吧……   回复  引用  查看    

#6楼  2007-04-09 09:52 kiler      

@Jeffrey Zhao

为什么不是呢?

Web Form里面有着非常丰富的webControl资源,可以很轻松的做出类似cs效果的web程序,一个很简单的问题,在页面对一个treeView进行显示和读取的操作哪个更容易,显然是Web Form,Web Form很好的屏蔽了用户对底层的实现的了解。ror做不到这一点,开发人员不懂js就没办法做。企业级开发里面对操作的便利性要求很高,webControl可以很好的实现这些要求。

ror的优点在于界面很灵活,所以更适合做网站这种对界面要求的比较高的项目,事实上现在用ror做的最多的还是网站吧。   回复  引用  查看    

#7楼  2007-04-09 10:42 亚历山大同志      

@kiler
对界面要求的比较高的项目


此点深得吾心,对变态的用户ASP.NET改起来确实有些痛苦,特别是1.1,用VS改界面简直是噩梦   回复  引用  查看    

#8楼  2007-04-09 11:05 kiler      

尤其是在改美工做的页面,简直是看天书啊,对于这样的项目使用ror中模板来生成显示页面是比较方便的。Web Forms最大的缺点就是程序员没有办法和美工很好的协同开发。   回复  引用  查看    

#9楼  2007-04-09 11:06 木野狐      

赞同 kiler 的看法。
asp.net/java -> 企业级应用程序开发;
ror/django -> 快速实现网站/高性能访问要求/...   回复  引用  查看    

#10楼  2007-04-09 11:16 无常      

对页面要求高的用ROR,
用功能要求高的用webform。   回复  引用  查看    

#11楼  2007-04-09 11:24 teana [未注册用户]

"Web Forms最大的缺点就是程序员没有办法和美工很好的协同开发"说到心坎去了。。   回复  引用    

#12楼  2007-04-09 11:40 非我      

可以借鉴外包的做法,先把页面做好,然后添加CS代码,最后做JS特效,可能会出现页面设计的代码不好写的问题,但我相信程序员是无所不能的,呵呵   回复  引用  查看    

#13楼  2007-04-09 11:54 Clark Zheng      

@kiler
@teana
“不知道大家有没有注意过CS2007里的表现引擎Chamelone?”不知道你们注意到这句话没有?对此有何见解?
另外,DNN的实现原理是什么样的?能不能解决程序员和美工协调工作的问题呢?   回复  引用  查看    

#14楼  2007-04-09 12:25 ZergTant [未注册用户]

能介绍下Chamelone的相关资料么?

cs2007的模板技术还是和以前差不多吧,能找到资料么
也不知道还开放不开放sdk了
  回复  引用    

#15楼  2007-04-09 12:30 jjx [未注册用户]

ruby on rails 主要的特征是其开发行为: 像约定,生成,集成的测试驱动开发,较少依赖ide等,它是一个框架,提供一个最佳的实践,意味着你将较少为架构的事情进行思考,比方说域对象中是不是应该有业务逻辑之类的废话。其次是建筑在底层的动态语言ruby 。

由于ruby on rails中的概念基本上在.net /java均有对应物,如mvc,layout,mixup,orm等,因此你可以使你的asp.net开发行为无限的接近ruby on rails.当然,由于底层语言的差异,你不可能做的和完全其一样。

1. ruby on rails 有view的重用,像render(:file =>'你的view文件') 和render_compoentn(:controller =>'控制器',:action =>'action')

2. ruby on rails 视图的的写作感觉类似于 asp,用一系列辅助函数来实现,没有什么东西能阻止你放弃vs.net / asp.net server control,而使用一系列辅助函数来表达

<%= text_field (object,proeprty,options) %>
大家可以看看monorails的一些东西,因此,如果就视图这点贬低asp.net而抬高ruby on rails没什么意义


我个人意见是,你学ruby on rails并不一定是为了真正使用它,而是学习它的一些做法,从来改良自己的开发行为。   回复  引用    

#16楼  2007-04-09 12:36 kiler      

@Clark Zheng

cs2007还有没有研究过,不过我觉得这只是一种变通的方法来实现模板功能,Chamelone可能是cs2007的一个自定义控件吧,我觉得在webform里面实现模板显示页面是一个比较别扭的方法,倒不如抛弃webform,使用monorail来做页面。

DNN,cs没有办法解决程序员和美工协调工作的问题,dnn,cs其实只能算一个很好的产品,不能算一个好的web框架,DNN,cs的开发模式根本就不能拿来做项目,一个最简单的例子,没有一个大型甚至是中型的门户网站是基于DNN,cs开发的。
  回复  引用  查看    

#17楼  2007-04-09 12:49 kiler      

@jjx
我们说的用ror其实应该就是用monorail,不是说放弃。net了,估计国内真的能拿ror来做项目也没有什么人吧,ror其实也有不少缺点的,比如说实现一些比较复杂的页面交互功能的时候用webform是更好的。两个结合起来用是最好的,比方说做一个网站,前台我用monorail,管理后台后台我用webform。

其实我们做。net的完全可以尝试一下用monorail来做网站前台,开发效率明显高过用webform的方式。

webform不适合做网站前台是很明显的事实,在这块甚至还比不过asp。   回复  引用  查看    

#18楼  2007-04-09 13:03 Cat Chen      

WebForm有控件又如何?当那些控件完全不适合你当前的情景时,你就必须从零开始写控件,这时候你就会发现很麻烦。

如果那是一个大系统,需要使用非常非常多组件,你需要规划好它们之间的依存关系,那么从零开始写控件也没什么所谓。如果只是一个普通的网站,每次你都要写控件,那还是ASP好了,或者比ASP更优秀的RoR。

WebForm的控件可以经过ControlAdpater重写,保留原有逻辑同时按照我的要求输出HTML?算了吧,这基于我了解控件原有逻辑,而工作量不亚于自己写一个控件,只有自己开发控件自己写ControlAdapter还是可以的。

简单来说,用WebForm就必须用它的控件特定的HTML输出方式,这其实让人比较难接受。   回复  引用  查看    

#19楼  2007-04-09 16:42 软件~民工      

我也认同楼主的观点,ROR还需要完善和提高,至少ROR需要一个比较好用的开发环境嘛,现在这些多不好用,唉,不说那   回复  引用  查看    

#20楼 [楼主] 2007-04-09 16:48 deerchao      

@jjx
我写这篇东西不是为了贬低RoR,而是为了反驳认为RoR比Web Forms强很多的观点。
render(:file =>'你的view文件') 这样的作法其实还是源代码级的重用,与Web Forms的二进制级的重用还是低一个层次,对吧?
RoR里关键词太多,魔法太多就变成魔鬼了,确实让我这样习惯了一切都被语言/框架规定死了的人有点望而却步。

@Cat Chen
“普通网站”通常不会遇到“需要使用别人未曾开发过的控件”的问题吧?而且真的遇上了,也可以在第一次用时把代码逻辑放到页面上,第二次需要使用时才把它抽出来做成控件。至于你说的每次都要写控件——我觉得这是一个粒度的问题,如果粒度过大或过小,那控件的重用性当然不会很好了。
关于控制现有控件输出的HTML,我觉得你可能有点Web Standards强迫症——毕竟我们开发Web的第一目的是完成客户的目前需求,而不是清晰合理的Xhtml代码,不是要求搜索引擎/所有的浏览器理解我们的页面,或者过了二十年网站还能使用。   回复  引用  查看    

#21楼  2007-04-09 16:59 A.Z [未注册用户]

@Cat Chen

支持
  回复  引用    

#22楼  2007-04-09 20:06 谢向荣 [未注册用户]

这个不好比,就好像要50公斤级 和 90公斤级的拳击手比赛一样。   回复  引用    

#23楼  2007-04-10 12:41 Cat Chen      

@软件~民工
现在的RoR开发环境很好用啊,只是习惯IDE要适应命令行工具还需要一段时间吧?

其实命令行的效率是比IDE高的,假如命令本身高效的话,这里高效不是指执行速度,而是指能用最少的命令完成我要的操作。假如我一句命令能够顶上你在VS2005中拖放一个控件然后在属性栏里面点几下更改几个属性,你说哪个高效?我的手根本不用离开键盘,而在VS2005中设置几个属性你的手必须在鼠标和键盘间切换几次。   回复  引用  查看    

#24楼  2007-04-10 12:45 Cat Chen      

@deerchao
我们所说的“客户”看来不是同一回事。你所说的应该是一个企业那样的,而我所说的是做一个例如douban那样的网站客户来自全Internet。   回复  引用  查看    

#25楼 [楼主] 2007-04-10 14:10 deerchao      

@Cat Chen
douban那样的网站确实是比较适合采用RoR/PHP之类的轻量级框架开发。不过个人觉得,目前国内搞Web 2.0创业的比起开发企业网站的人还不是太多吧?我对国内Web 2.0创业的前途表示怀疑,因为跟风的太多了——很容易成为别人免费的市场调查员。

熟练使用优秀的命令行效率肯定比使用IDE高,但是要能熟练使用Comand Line,需要的时间比熟悉一个IDE的时间要长太多了。不久前我还试了一下,想用Emacs代替UltraEdit,但是经过半天的学习之后还是放弃了(这还是从一个GUI工具转向另一个GUI工具,阻力应该是小于GUI转向CML的),惯性力量太大了,不是一朝一夕就能改过来的,而我们在开发过程中,也不可能有很长的时间来学习新的开发工具。   回复  引用  查看    

#26楼  2007-04-11 18:53 Wuvist [未注册用户]

广告一下……豆瓣使用的既不是asp.net也不是RoR更不是php……
豆瓣用的是伟大的python~~~~
youtube也是~~~

国际、国内最牛X的web 2.0网站用的都是python……

这是否很说明问题呢?

还在等什么呢?立刻去泡 www.djangoproject.com 吧~
hoho~~   回复  引用    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-04-17 02:41 编辑过
Google站内搜索


China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!

相关文章:

相关链接:


 
<2007年4月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

导航

统计

公告

给网络添加价值,就是让自己增加价值.

本博客所有内容,均为原创或对互联网已有资源的再加工,希望对你有用.在声明原作者的前提下,你可以任意使用,但本人对其正确性,使用的后果等不做任何担保,也不负任何责任.

正则表达式30分钟入门教程 v2.21 2007-8-3

I Want Spec#!

与我联系

搜索

 

常用链接

留言簿(66)

我管理的小组

我的标签

随笔档案(127)

文章分类(9)

文章档案(9)

新闻档案(9)

Links

积分与排名

最新评论

评论排行榜