ASP.NET MVC vs webform

来源:互联网 发布:淘宝鞋店名字大全 编辑:程序博客网 时间:2024/04/28 14:54

ASP.NET MVC 框架是 .NET 平台 Web 开发的主流,但是并不适合初学者

ASP.NET MVC 推出已经有3年多了。现在社区里面看,在学习 MVC 框架的人越来越多。但是绝大部分都无法入门。原因是 MVC 框架和 WebForms 的开发方式相比,有门槛,它并不适合初学者入门学习。

从1991年微软推出VB 1.0以来,微软一直在走一条路线,就是让完全不懂开发的人很快能上手它的开发工具。好处在于,处于金字塔低端的入门开发者数量众多,让这些人迈入开发者的行列一度使得Windows平台的软件丰富和廉价。

微软从做Word起家,当其他排版软件还在使用复杂的格式命令的时候,微软则将WYSIWYG进行到底。微软的开发工具承袭了这样的价值观——图形化设计界面,将数据和界面绑定,编写简单的代码,一个程序就完成了。

在本世纪初,应用程序向Web迁移的大趋势已经不可阻挡,微软则希望通过Web Forms,继续它的傻瓜开发工具的神话,然而事实上却是不奏效的。HTTP协议并非Windows API,HTTP分割出客户端和服务器端,这使得状态跟踪和事件响应变得非常复杂。最糟糕的是,微软虽然极力隐藏一个Web程序和桌面程序的不同,但是事与愿违,入门开发者无法适应此间的差异,所以程序总是无法按照他们的预期运行。

回归本源成了业界的共识,RoR、Struts、Django,在各自的平台上流行开来,但是到了微软这里,事情却不一样了。因为微软培养起来一个庞大的,但是相当初级的用户群体,向这样一个群体推广它的 ASP.NET MVC,困难重重。.NET开发者的现状是什么呢?几乎完全不会编写程序,他们只能编写简单的代码,把控件粘合在一起;极度依赖GUI的开发工具,善于使用鼠标,而不怎么用键盘;围绕“控件”编程,用用户的思维设计程序,控件重用代替代码重用;对于HTTP和HTML几乎无知。

当然,从相对角度说,初学者在各个平台上都是存在的。但是.NET领域的奇怪现象是,一批一批初学者被按照操作工那样训练使用微软独特的开发方法,固化定形成熟练的操作工——而不是转化为更高阶的开发者。在其它平台,API的使用者->API的编写者->系统架构设计是一个自然的进阶路线,而.NET平台则是控件的使用者->控件的熟练使用者。

有理由相信,C# 3开始增加的一系列语法特征是为Entity和MVC赶场出来的。和其他平台不同的是,微软有一个法宝,就是它同时是语言的创造者和框架的开发者,它可以为框架而丰富完善它的语言。但是这就造成了一个很奇怪的现象。

一个原有的C#开发者,面对Lambda表达式、扩展方法一片茫然,相反一个Ruby程序员却可以轻松看懂C# 3的程序。毋庸讳言,C# 4和C# 1有了本质的不同,这种变革甚至比VB6到VB.NET更加激进。

对于一个ASP.NET开发者来说,不得不看到,MVC框架让他之前积累的经验完全无用武之地。MVC(这里说的MVC都是ASP.NET MVC)使用的LINQ(虽然LINQ并非MVC所必需,但是LINQ/Entity搭配MVC的组合是不争的主流,如果你看过MVC源代码,你会发现LINQ在MVC内部无所不在),以及Lanbda表达式、各种接口/委托,依赖反转的编程模型,使得开发者几乎需要重新学习一种新的编程语言。要想领会这个框架的设计思路,则是这些开发者面临的第二重考验。

再者,MVC彻底将程序员从UI设计上解放开来,但是在实际开发上并非如此——团队结构没有变化,程序员同时兼具交互设计师和美工。在ASP.NET时代,一个程序员虽然不一定能设计出很好的界面,但是至少它能工作。而抛弃了控件的视图,则是对他们很大的挑战。

MVC倡导的价值是CoC(约定优先于配置),这和乐高玩具一样的ASP.NET WebForms完全不同。控件、页面、code behind约束了一个程序的结构,虽然笨拙,但是坏不到哪里去。而MVC则不同,MVC的约定是无形的,一个没有学习过这些约定的程序员投入到开发中,他简直就是一个破坏者。一个开发者,它可以打破MVC约定的一切,编写随意的代码,这些代码看似还能工作——事实上比不能工作更糟。

ASP.NET程序员习惯于IDE给他们错误提示,然后修改程序,直到可以交货。你删除一个aspx文件,或者破坏了页面文件的结构,IDE马上就给出错误,直观地告诫开发者此路不通,所以不会出现大错。而MVC则不同——它更像开发者在写一个自由的类库。很可能一个程序还没有交货就被破坏得无法交货。

MVC框架倡导的其他价值包括敏捷、测试驱动开发、领域驱动开发、持续集成、restful url、低调的javascript等等,无论从开发思维还是项目管理上,都让现有的开发者觉得棘手。

很多书籍、blog都在向现有的 ASP.NET 开发者宣扬 MVC 框架的种种优势。然而事实上并非如此,MVC 与其说比 ASP.NET 传统的开发模式有优势,是因为它的门槛隔绝了初级的开发者,那些优势无不来自标准化、符合约定和敏捷的流程,而并不是 MVC 框架本身——让新手使用 MVC 只会带来灾难。

MVC是为熟练掌握web标准和同时渴望敏捷开发又不失严谨的开发者准备的,但是这有些滑稽——因为这个群体的大多数人都更愿意使用非微软平台的产品。也许MVC还适合那些以C# 3/4为起点的开发者,但不是是现在的这批,这需要时间的证实。

随着html5的问世,websocket,xmpp,nodejs等等新技术/标准将会对现有的技术再一次洗牌,我们拭目以待。

 

=============================================================

http://bbs.csdn.net/topics/370151376

 

======================

我们如何评价微软呢? 封装大师,是最贴切的。本人不认为微软在计算机领域有任何值得称道的建树,微软和国内的那些商业性质很强的计算机类公司一样,不是一家技术主导的公司,仅仅是恰好做IT行业而已。

最近这两年,微软又搞出了一个 asp.net mvc ,又像当年 asp webform一样,引起一阵学习讨论的狂潮,但是大家想过没有,学习的成本是非常昂贵的,一家有规划和远景的公司,一个有长远眼光的开发者,应该都会严格控制学习的成本的。

既然asp.net mvc 又是一个 微软封装的产物,我们有必要投入巨大的成本来学习跟进吗?

当年微软推出 asp.net webform的时候,网上那些对微软技术之外的技术了解不多的人们,大肆吹捧webform。什么革命性的改进,统一了web和桌面程序。。。会写asp.net server control成了一个高手的代名词。

可是几年后呢,随着web 2.0大行其道,人们对页面的美观、交互有了更高的要求,这时webform就不行了,就算是使用asp.net的网站,也无一不例外的放弃了webform,viewstate, server control。。。

于是微软的asp.net团队又开始封装,搞出一个MVC。虽然各种视频、教材里都说,asp.net mvc 是 asp.net web开发的另一种选择,不是替代 webform的,但是他们的内容里又无一例外的指出了webform的种种不是,把webform批得一无是处。

好吧,微软自己闪自己嘴巴子,咱们就不笑话它了,毕竟一个学法律出身还半路退学的同学搞的计算机公司,在技术上不能期望它有多高的建树。

我们再来看看asp.net mvc,甚至其它web mvc模型,难道就没有不合适的地方吗? 我们还是用微软宣传mvc一个重要原因:回到web开发的本来面目,直接面对html和javascript/css来说吧。

当年html出现的时候,都是静态文件html, 我们在浏览器输入一个页面地址,在服务器上对应的路径下就有那个文件。但是MVC是这样吗?不是,MVC把你的请求给路由转向了,我打开一个MVC项目的源代码,实际上我一下是看不到这里面可以访问哪些页面的。这是非常不合适的,还是没有回到Web的原始状态。

这里说到URL重写,路由等词语,我认为应该是是搜索引擎适应我们的网站,而不是网站适应搜索引擎!URL重写等技术,虽然号称是SEO,但是实际上对程序的逻辑完整性是不利的。有时候一个页面出错,我为了找到是哪个页面的问题,不得不去配置文件里搜索URL对应的实际页面的地址。但是,为什么不直接使用页面的地址呢?

另外一个,MVC的模型过于复杂,Model,View,Controller三种划分,造成项目里过多的类,如果你在非常劳累的情况下加班处理这些程序,你很容易陷入混乱状态。

我们看看PHP,从Web出现早期,知道今日Web 2.0, web 3.0,一直是常青树,为什么?就是因为简单! 微软当年批判自己的asp,说代码和html混在一起,不好,于是力推webform,html代码中使用server control来分离html和代码。过了几年, webform不行了,又说要让web开发回到本来面目,于是又转回去力推mvc,又在页面中混杂html和布局代码。这都不要脸到什么地步了? 

asp.net团队说让web开发回到本来面目的说法,是正确的,但是MVC还是一个不让人满意的产品。不过asp.net团队又搞出一个web matrix和asp.net web pages,说白了,就是使用MVC中的视图层和视图模版,但是把逻辑代码也写在html页面里,这非常类似微软以前的asp,但是又不好意思重启asp,就做了一些变化。

其实微软最应该做的,既不是asp.net mvc, 也不是asp.net web pages,而是应该发布一个 asp 4.0, 把当年的asp 3.0升级一个版本,使用javascript作为asp 4.0的脚本语言,同 时引入对.net framework的支持,也就是说让服务器端的javascript支持CLR,放弃原来在asp中的vbscript和COM。

微软有了C#, J#, F#, IronPython, IronRuby .....但是微软偏偏不推出 Javascript#。

(至于服务器端的node.js,哥想说,要不是那个傻乎乎的作者非要搞极客一样的异步调用,node.js 本来可以在段时间内火起来的,可惜,人最难改变的就是思想认识。)

在服务器端和客户端都使用相同的javascript,好处是大大滴。一方面可以让开发者身兼数职,招聘的人员只需要精通javascript,这比洋洋稀松的人写得代码质量高多了。另一方面输入验证等逻辑,完全可以公用相同的代码。

在科技界,甚至其它行业,一直有一些口号在流行:活到老学到老...本人学习新技术能力强...xxx过时了,现在都yyy了...我想问这些话都是谁说的?既然那么多牛人大师,都是在多年的研究学习后,说要重返C,重返C++,重返系统编程等,怎么还有人宣传学习新技术呢?这背后的推手就是微软和一些新手。

宇宙多少亿年了,都遵循着一成不变的规律,我们人生才短短几十载,干嘛要改变?你嫌你自己活的时间太长吗? 微软是喜欢年轻人不停的学习的,不然它封装的新组件,谁用啊

http://blog.csdn.net/unistd/article/details/7670397

原创粉丝点击