ASP.NET MVC 框架是 .NET 平台 Web 开发的主流,但是并不适合初学者
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等等新技术/标准将会对现有的技术再一次洗牌,我们拭目以待。
[最优解释]
sf。。。。。。。。
[其他解释]
学习。
[其他解释]
ASP.netMVC绝不是MVC设计模式,更不能算是所谓MVC框架,
JAVA的SSH本来就很糟糕了,ASP.netMVC一脉相承,
ASP.netMVC对MVC设计模式的支持甚至还不如winform和WebForm,SL
充其量和js相当,但遗憾的是JS在客户端,而asp.Net隔山打牛
[其他解释]
当我们实现了一个业务,
既可以用asp.netWebForm去呈现,
也可以用html+js去呈现,
也可以用winform,SL等其他UI平台去呈现,
你只要为这几种UI准备相各自的通用的视图驱动器就可以了
这才是MVC的,
asp.netMVC,要是非要往MVC上扯的话,充其量算作一个html+js的视图驱动器空壳,
而微软并没有提供和数据分离的,动态的驱动界面的手段,
[其他解释]
蹭分,学习
[其他解释]
楼主的观点有偏颇
[其他解释]
飞翔哥:
什么是“和数据分离的,动态的驱动界面的手段”
[其他解释]
必火贴!
------其他解决方案--------------------
路过
[其他解释]
路过,路过,学习学习,顶顶
[其他解释]
原创吗,写的不错。
[其他解释]
不同意楼主的说法,初学者最好直接接触asp.net mvc和http协议,避免成为楼主说的“控件的熟练使用者”。原因不在于技术,asp.net mvc和webform并无本质不同,它们的基础对象都是一样(Context,Request,Repsonse),用webform一样可以实现mvc模式。问题在于人,开发者最初迈出的那一步,对他的方向和习惯影响非常大,当他习惯了控件的小甜头之后,会没有耐心了解底层的原理。
[其他解释]
总结得好,一直就有这感觉。。
[其他解释]
恩,不错,学习,支持原创
[其他解释]
asp.net mvc 和 entity framework 没有关系,一个是领域层前面的应用层,一个是领域层后面的持久化技术,两者风马牛不相及。如果硬说它们有关系,那也是食客和饭馆的关系,方便而已。asp.net的本质仅仅是对web请求上下文的封装,不要赋予他过多的含义,否则就回到了webform的老路上。
[其他解释]
...........................
我现在正努力成为控件熟练者!
[其他解释]
路过学习,MVC 3很有鸭梨啊
[其他解释]
不要说得那么抽象,一点也看不明,说了等于没说
[其他解释]
mvc怎么会不适合初学者了
[其他解释]
写的非常好!
太棒了。
完全赞同lz的观点。
[其他解释]
这个我觉得要看是怎样看的,如果抽象看,感觉都是一种思路,具体细节就不同了。比较开发的思路有了变化。不管适合不适合。编程总想急功近利,本就不对。静下心了。思索程序的奥秘吧。孩子。
[其他解释]
MVC只是个概念,ASP.NET的MVC框架确实有MVC的概念。
所谓概念只是一种方法,当然使用webform的同学们只要避免使用webform控件再加上ajaxpro等ajax框架。
也可以轻松实现MVC的思想。同时也可以应用webform的其他特性。
我认为MVC思想可以学,但没必要追求MVC框架,不过可以学习一下其中优秀的部分。例如清晰的模块化设计思想。
另外个人觉得MVC框架只是个工具与LINQ一样,与其钻研这个。不如真正的把应用层面的基础打好。例如LZ说的HTML5/websocket 之类的才是真正需要钻研的。
[其他解释]
路过学习!
[其他解释]
写的不错
[其他解释]
留个名,万一火了呢。
[其他解释]
路过学习!
[其他解释]
额, 初学者......
[其他解释]
LZ的写的不错 但是我个人觉得 其实MVC也适合初学者
[其他解释]
java程序员学Web开发就要学strust一样,如果没有WebForm这种模式,初学者学的就是MVC了。
asp.net mvc可以说是在strust(重配置)和RoR(重约定)基础上的升级。MS在前台大胆的吸收了jQuery作为
其js框架也是开明之举。
显然,MS想让WinForm程序员无缝开发Web应用的理想没有实现的那么完美。。。这一点支持lz
但对于初学者如白纸一般,反而比较容易接受MVC的思想,倒是WebForm开发惯了难以舍弃直接数据绑定的便利。
[其他解释]
前些天 试用了下MVC 确实好多原先的开发习惯都被改变了 不过 不得不承认 用MVC做管理后台确实好快(因为后台对页面样式没太大要求)...
这篇文章 写的不错 顶一下 留个名先!
[其他解释]
我是一个初学者,在哪里可以学习到mvc入门,最好有个小例子
[其他解释]
没学过asp.net mvc
[其他解释]
其它部分都很同意。。。
但是MVC其实很适用于初学者。。。
[其他解释]
MVC看起来像是界面与程序都分离了,不过做起来的时候才发现没有那么彻底
另外MVC开发东西个人觉得没有快捷,只是新出来一种强制分离的三层思想,基本都是EF+LINQ的使用
里面的AJAX我觉得jquery比软软封闭的js要好,就像大家用javascript而不用jscript一样,微软总希望强制把自己的东西塞给开发者
优缺点都存在,看情况使用工具
[其他解释]
发表几点个人看法:
1、微软最初的webform,本来是想让大家跳出mvc的圈子。webform其实和jsp没差哪,除了崩溃的控件
2、webform的事件机制很好,终于不用配置action、FORM了;
3、那崩溃的数据持久层,也被DataSet取代了,内嵌的方法甚至让我们可以通过Dataset的XML实现来彻底抛弃数据库,java?除了后来apache的一个xml映射的框架,我还真不知道别的数据持久层除了bean还有什么东西。IBM的BO不错,也是基于XML的实现,但是比起Dataset来,差太多。怎不知道现在的微软还搞什么MVC和三层架构(因为有人还故意把DataSet转换成一个结构体来用,我太崩溃了?难道三层架构都得照着struts做不成)
4、java在BS方面有强大的中间件支持,微软除了IIS,我还没看到别的。尽管目前有很多针对http加速的解决方案,但是,在要求更大的企业级开发中,webform仅仅是个小船而已(偏激了点,至少,央企和政府们全是java的解决方案)。
5、在桌面软件中,则完全会显示微软的优势,java,见鬼去吧。
6、本人java和.net全做,这两种语言都有我喜欢的优势。尽管什么都会做,但是我讨厌SSH那令人崩溃的配置,我讨厌那些自作聪明的服务提供,我讨厌hibernate,ibatis能让我稍微舒服点,我讨厌spring,尽管它能帮我做很多事。
综合来说,这两者的难度其实并未有太大的差别,微软更简单,java稍微繁琐一些。桌面系统微软全面占优,BS各显其能。其实在有针对性的优化过程中,java还是不错的,尽管.net也还行,大家爱用什么语言就用什么语言就是,没得挑这挑那的
[其他解释]
没学过MVC的飘过... 弱弱问一句 MVC真能成ASP.NET的主流吗?
[其他解释]
学习了,需要学的东西太多
[其他解释]
MVC真的是.net的框架的主流吗?
[其他解释]
路过的,asp.net webform,asp.net mvc都是用的说。。。。。。
[其他解释]
UP~~~
[其他解释]
该回复于2012-02-05 13:13:40被版主删除
[其他解释]
该回复于2011-11-16 10:10:25被版主删除
[其他解释]
该回复于2011-09-01 10:18:35被版主删除
[其他解释]
该回复于2011-09-26 10:41:35被版主删除
[其他解释]
Struts重配置和RoR重约定主要是Java和Ruby语言的差异。
白纸的观点,我觉得不对,是这样的,经过系统学习的程序员是一张白纸,而没有系统学习过的,从普通用户转来的开发者,充其量只是用来做纸张的纤维。
微软的想法是所见即所得,你见过软件,会用软件,你就能开发软件。很多ASP.NET程序员(事实上如我所说,如果没有微软这套傻瓜化的东西,他们根本步入不了程序员的门槛),他们一直在用用户的思维考虑程序,这两个DropDownList怎么联动,这里放一个Grid,里面装入什么样的数据,这个按钮按下去做什么……他们几乎不会编程,编写的代码只是为了把这些被他们称作前台的东西粘贴起来而已。
另外ASP.NET WebForms先于RoR出现。从这个观点看,如果没有RoR,也许.NET开发者是在ASP.NET和ASP之间选择。
[其他解释]
评论很热闹,似乎说的都很有理,学习了
[其他解释]
新人路过。。膜拜学习
MVC != asp.net MVC
[其他解释]
该回复于2011-08-25 10:39:41被版主删除
------其他解决方案--------------------
学习一下
[其他解释]
MVC确实是很好的东西,而且微软的平台也也很好,很全面,期待微软更加完善,有更多的人参与进来!
[其他解释]
学习...
[其他解释]
学习...
[其他解释]
这具蛮好的.
[其他解释]
学习了!对于一个新手来说MVC确实很让我头疼!
[其他解释]
路过…………
[其他解释]
路过…………
[其他解释]
唔,我的想法是越是初学者才需要受框架约束的。
比如:页面里直接写业务代码、业务类不要直接读界面标签等。
就像初学C语言,不是所有功能都搞到一个main函数里。你得根据不同功能做n个函数。
[其他解释]
学习一下
[其他解释]
看看!!
[其他解释]
学习,,
[其他解释]
学习了...
[其他解释]
学习了
[其他解释]
学习了
[其他解释]
至于说用来限制你的技术门槛或其他门槛。这是必须要垮越的
“控件党”想深入学习,也从这里起步。
起步思想和观念不对只能做it里的滥竽
[其他解释]
顶一个
[其他解释]
我顶一下。
[其他解释]
很好的氛围...
[其他解释]
该回复于2011-09-16 11:04:16被版主删除
[其他解释]
学习。
[其他解释]
学习了
[其他解释]
其实对于程序员入门来说,微软的东西是再好不过的了……
[其他解释]
完全赞同!
[其他解释]
唉,其实都是0和1
[其他解释]
是吗?不太像啊
[其他解释]
我发现C#这个论坛特别爱讨论这类问题。MVC适不适合初学者,这个问题没多大意义。对于真正的初学者来说,什么新的,没有什么适合不适合,关键在于你有没有兴趣学这些东西。从汇编开始初学并不比从拖控件开始初学的高人一等,拖控件的也不一定一辈子拖控件,要看你肯不肯深入。在真正工作当中,一个项目牵扯的东西实在太多太多了,选用什么技术和什么框架只是其中一部分而已。
[其他解释]
顶起。。。
[其他解释]
学习了。
[其他解释]
看看,看看。。。。
[其他解释]
顶顶更健康!
[其他解释]
http://www.asp.net/mvc
mvcmusicstor.codeplex.com
------其他解决方案--------------------
比winform的程序还丰富的交互应用界面
能否举个例子
[其他解释]
我是在尽量说清楚互联网公司的网页开发,与软件公司的企业web应用程序开发,的选择工具上的区别。
[其他解释]
对于互联网类的项目,如果说前端开发有什么框架的话,现在流行的也就是基于javascript框架产品的开发。微软的asp.net早在几年前已经在轻量级的交互网页编程方面甘拜下风,把前端开发让位给 jQuery 这类别人的产品。asp.net在4、5年之内都没有什么真正的作为。微软的asp.net项目组不过是打算步servlet那种应用的后尘,模仿java等等,带着一些web开发人员过把瘾就死。
[其他解释]
我先睡了,明天继续研究P哥
[其他解释]
如果全副技能就是做网页,说它是框架有点过。普通的会做html/javascript/asp or php的最好。
如果你是做web企业应用,那么做一个比winform的程序还丰富的交互应用界面,它没有什么技术含量帮助你做这类程序。
[其他解释]
现在的框架就是MVC
[其他解释]
比如说我们看网页类的开发,那么多的内容,你搜索一下,其<form>是干什么的呢?甚至很难找到!这就很明确,这不是交互式应用程序,而且也不是靠服务器一遍一遍地下载html的。也就是说,假设你使用asp.net来编写这类页面的话,连form都不必有,也不用考虑本页的回发机制。既然网页类开发是不集中在页面自身回发机制的,在一个本来无足轻重的特性上作为你“吊起”自己的技术选择的筹码,是不明智的,你的网站应该敞亮一点综合各种“简单”网页开发技术,不论是MVP还是MVC都是不合适的。
[其他解释]
P哥指的是页面级别的状态维护吗
[其他解释]
每天回一帖 10分可用。
[其他解释]
mvc也不是很难学啊
[其他解释]
学习了
[其他解释]
来学习,顶 一下。
[其他解释]
据说MVC是一种模式,不是框架。
[其他解释]
学习下,谢谢~~
[其他解释]
学习。
[其他解释]
学习~
[其他解释]
null
[其他解释]
null
[其他解释]
+1
[其他解释]
mark