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

threenewbee 2011-08-25 01:48:50
加精
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等等新技术/标准将会对现有的技术再一次洗牌,我们拭目以待。
...全文
21286 257 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
257 条回复
切换为时间正序
请发表友善的回复…
发表回复
oLanJieKou 2014-04-04
  • 打赏
  • 举报
回复
初学MVC 让我了解了html的本质 其实mvc还是不错的 脱离webform后可以看清楚web的本质
暗香浮逝 2013-11-29
  • 打赏
  • 举报
回复
我觉得MVC看起来好像挺简单,但是要是让我自己做的话我做不出来 ps,小女子现在有一个程序,要将它改写成MVC的,实在是能力有限,盼望哪位大神出手相救.....
小溪流ii 2013-11-28
  • 打赏
  • 举报
回复
学习了,java专业的 毕业后开始接触C#,几种模式还不清楚了,但是=>这种语句的意思完全能理解,应该学完java的在接触C#语句不会觉得那么困难吧
白莲河观音山 2013-10-07
  • 打赏
  • 举报
回复
我就是一个新手,对于MVC框架,说实话,原理理解的不是很透~
心灵宁静 2013-09-27
  • 打赏
  • 举报
回复
MAKTY 2013-09-22
  • 打赏
  • 举报
回复
引用 249 楼 guo449211721 的回复:
我个人觉得mvc可以让程序员放开手脚的写,而不是约束在控件里。
放的太开了容易收不住,后期换人维护就是个大坑
国士_枫 2013-09-20
  • 打赏
  • 举报
回复
世事无绝对思密达。。。
smiletolife1 2013-09-18
  • 打赏
  • 举报
回复
还没有接触,了解一下
一叶无秋 2013-09-13
  • 打赏
  • 举报
回复
我个人觉得mvc可以让程序员放开手脚的写,而不是约束在控件里。
Suneboy 2013-05-30
  • 打赏
  • 举报
回复
引用 5 楼 MoneySoft 的回复:
当我们实现了一个业务, 既可以用asp.netWebForm去呈现, 也可以用html+js去呈现, 也可以用winform,SL等其他UI平台去呈现, 你只要为这几种UI准备相各自的通用的视图驱动器就可以了 这才是MVC的, asp.netMVC,要是非要往MVC上扯的话,充其量算作一个html+js的视图驱动器空壳, 而微软并没有提供和数据分离的,动态的驱动界面的手段,
Controller返回xml格式数据给View层,数据包括展示配置信息,View层通过遍历将数据展示,这样是不是实现了你所说的效果呢?
zhqchd 2013-05-16
  • 打赏
  • 举报
回复
很是迷茫,褒贬不一.到底现在变成该用什么样的框架哦.
dailng 2013-05-15
  • 打赏
  • 举报
回复
学习了,请问对于一个使用控件者和开发者区别在于哪些?
hlm750908 2013-05-15
  • 打赏
  • 举报
回复
引用 18 楼 theks 的回复:
总结得好,一直就有这感觉。。
嗯 想看mvc但不得其门而入
u010101229 2013-05-08
  • 打赏
  • 举报
回复
学习 写的不错
tank4621 2013-05-07
  • 打赏
  • 举报
回复
学习,很好的贴顶起
qinlue1314 2013-03-01
  • 打赏
  • 举报
回复
学习了,有没有适合初学者的学习资料啊?
fly3854264 2012-12-28
  • 打赏
  • 举报
回复
新手,正在学习MVC ...
裸奔在上海 2012-12-27
  • 打赏
  • 举报
回复
没怎么研究过,只是前不久用MVC做了公司的一个项目,也是照搬view表现数据,Controller控制跳转,连接Model为view提供数据,Model连接业务逻辑层和前段数据处理逻辑。业务逻辑还是跟之前的webform没有什么变化。感叹技术发展太快,跟不上了
defender_ 2012-12-21
  • 打赏
  • 举报
回复
让我们情何以堪啊
穿靴子的狼 2012-12-10
  • 打赏
  • 举报
回复
听你这么一说,咋了就不让新手学了这是要?
加载更多回复(221)

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧