关注
caozhy 
caozhy
本版等级:
结帖率:81.58%
    更多勋章
楼主 发表于: 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等等新技术/标准将会对现有的技术再一次洗牌,我们拭目以待。 更多3 分享到: 相关知识库:  React Native  iOS  直播技术  微信开发 width="728" height="90" frameborder="0" marginwidth="0" marginheight="0" vspace="0" hspace="0" allowtransparency="true" scrolling="no" allowfullscreen="true" id="aswift_1" name="aswift_1" style="box-sizing: content-box; left: 0px; position: absolute; top: 0px;">
  • id="iframeu1636200_0" src="http://pos.baidu/ocym?rdid=1636200&dc=2&di=u1636200&dri=0&dis=0&dai=3&ps=2203x385&dcb=BAIDU_SSP_define&dtm=HTML_POST&dvi=0.0&dci=-1&dpt=none&tsr=0&tpr=1474723533673&ti=ASP.NET%20MVC%20%E6%A1%86%E6%9E%B6%E6%98%AF%20.NET%20%E5%B9%B3%E5%8F%B0%20Web%20%E5%BC%80%E5%8F%91%E7%9A%84%E4%B8%BB%E6%B5%81%EF%BC%8C%E4%BD%86%E6%98%AF%E5%B9%B6%E4%B8%8D%E9%80%82%E5%90%88%E5%88%9D%E5%AD%A6%E8%80%85-CSDN%E8%AE%BA%E5%9D%9B-CSDN.NET-&ari=2&dbv=2&drs=3&pcs=1349x557&pss=1349x15571&cfv=0&cpl=44&chi=1&cce=true&cec=UTF-8&tlm=1474723535&rw=557&ltu=http%3A%2F%2Fbbs.csdn%2Ftopics%2F370151376&ltr=https%3A%2F%2Fwww.baidu%2Flink%3Furl%3DaxlvEPDefpcytYy3R2kISWLvRrQnF9hIAOQGHeNGgX3Q7zlpJtvkicUIVj1V3-cD%26wd%3D%26eqid%3D86f65474000068290000000657e67ece&ecd=1&psr=1366x768&par=1366x706&pis=-1x-1&ccd=24&cja=true&cmi=157&col=zh-CN&cdo=-1&tcn=1474723535&qn=f7779e7bdc9d9a00&tt=1474723533134.2205.2455.2456" width="200" height="22" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" style="box-sizing: content-box; border-width: 0px; border-style: initial; vertical-align: bottom; margin: 0px;">  
  • id="iframeu1636201_0" src="http://pos.baidu/ocym?rdid=1636201&dc=2&di=u1636201&dri=0&dis=0&dai=4&ps=2203x639&dcb=BAIDU_SSP_define&dtm=HTML_POST&dvi=0.0&dci=-1&dpt=none&tsr=0&tpr=1474723533673&ti=ASP.NET%20MVC%20%E6%A1%86%E6%9E%B6%E6%98%AF%20.NET%20%E5%B9%B3%E5%8F%B0%20Web%20%E5%BC%80%E5%8F%91%E7%9A%84%E4%B8%BB%E6%B5%81%EF%BC%8C%E4%BD%86%E6%98%AF%E5%B9%B6%E4%B8%8D%E9%80%82%E5%90%88%E5%88%9D%E5%AD%A6%E8%80%85-CSDN%E8%AE%BA%E5%9D%9B-CSDN.NET-&ari=2&dbv=2&drs=3&pcs=1349x557&pss=1349x15571&cfv=0&cpl=44&chi=1&cce=true&cec=UTF-8&tlm=1474723535&rw=557&ltu=http%3A%2F%2Fbbs.csdn%2Ftopics%2F370151376&ltr=https%3A%2F%2Fwww.baidu%2Flink%3Furl%3DaxlvEPDefpcytYy3R2kISWLvRrQnF9hIAOQGHeNGgX3Q7zlpJtvkicUIVj1V3-cD%26wd%3D%26eqid%3D86f65474000068290000000657e67ece&ecd=1&psr=1366x768&par=1366x706&pis=-1x-1&ccd=24&cja=true&cmi=157&col=zh-CN&cdo=-1&tcn=1474723535&qn=43f7e4e329473ebe&tt=1474723533134.2206.2514.2517" width="200" height="22" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" style="box-sizing: content-box; border-width: 0px; border-style: initial; vertical-align: bottom; margin: 0px;">  
  • id="iframeu1636204_0" src="http://pos.baidu/ocym?rdid=1636204&dc=2&di=u1636204&dri=0&dis=0&dai=5&ps=2203x893&dcb=BAIDU_SSP_define&dtm=HTML_POST&dvi=0.0&dci=-1&dpt=none&tsr=0&tpr=1474723533673&ti=ASP.NET%20MVC%20%E6%A1%86%E6%9E%B6%E6%98%AF%20.NET%20%E5%B9%B3%E5%8F%B0%20Web%20%E5%BC%80%E5%8F%91%E7%9A%84%E4%B8%BB%E6%B5%81%EF%BC%8C%E4%BD%86%E6%98%AF%E5%B9%B6%E4%B8%8D%E9%80%82%E5%90%88%E5%88%9D%E5%AD%A6%E8%80%85-CSDN%E8%AE%BA%E5%9D%9B-CSDN.NET-&ari=2&dbv=2&drs=3&pcs=1349x557&pss=1349x15571&cfv=0&cpl=44&chi=1&cce=true&cec=UTF-8&tlm=1474723535&rw=557&ltu=http%3A%2F%2Fbbs.csdn%2Ftopics%2F370151376&ltr=https%3A%2F%2Fwww.baidu%2Flink%3Furl%3DaxlvEPDefpcytYy3R2kISWLvRrQnF9hIAOQGHeNGgX3Q7zlpJtvkicUIVj1V3-cD%26wd%3D%26eqid%3D86f65474000068290000000657e67ece&ecd=1&psr=1366x768&par=1366x706&pis=-1x-1&ccd=24&cja=true&cmi=157&col=zh-CN&cdo=-1&tcn=1474723535&qn=2f534b692331d483&tt=1474723533134.2207.2723.2723" width="200" height="22" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" style="box-sizing: content-box; border-width: 0px; border-style: initial; vertical-align: bottom; margin: 0px;">
    对我有用[1]  丢个板砖[1]  引用 |  举报 |  管理 回复次数:257
    关注
    wangmu7206
    捧剑者
    本版等级:
    #1 得分:1 回复于: 2011-08-25 01:59:41 sf。。。。。。。。
    对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理
    关注
    zhan7505201
    zhan7505201
    本版等级:
    #2 得分:1 回复于: 2011-08-25 06:33:40 学习。
    对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理
    关注
    MoneySoft
    --缪军--
    本版等级:
    #4 得分:1 回复于: 2011-08-25 07:26:36 ASPMVC绝不是MVC设计模式,更不能算是所谓MVC框架,
    JAVA的SSH本来就很糟糕了,ASPMVC一脉相承,

    ASPMVC对MVC设计模式的支持甚至还不如winform和WebForm,SL
    充其量和js相当,但遗憾的是JS在客户端,而asp.Net隔山打牛
    对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理
    关注
    MoneySoft
    --缪军--
    本版等级:
    #5 得分:1 回复于: 2011-08-25 07:29:42 当我们实现了一个业务,
    既可以用aspWebForm去呈现,
    也可以用html+js去呈现,
    也可以用winform,SL等其他UI平台去呈现,
    你只要为这几种UI准备相各自的通用的视图驱动器就可以了
    这才是MVC的,

    aspMVC,要是非要往MVC上扯的话,充其量算作一个html+js的视图驱动器空壳,
    而微软并没有提供和数据分离的,动态的驱动界面的手段,
    对我有用[1]  丢个板砖[0]  引用 |  举报 |  管理
    关注
    andywangguanxi
    EdsionWang
    本版等级:
    #6 得分:1 回复于: 2011-08-25 07:45:25 蹭分,学习
    对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理
    关注
    hangang7403
    hangang7403
    本版等级:
    #8 得分:1 回复于: 2011-08-25 07:52:24 楼主的观点有偏颇
    对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理
    关注
    theillusion
    theillusion
    本版等级:
    #10 得分:1 回复于: 2011-08-25 08:11:39 飞翔哥:
    什么是“和数据分离的,动态的驱动界面的手段”
    对我有用[1]  丢个板砖[0]  引用 |  举报 |  管理
    关注
    mrlen
    颤菊大师
    本版等级:
    #11 得分:1 回复于: 2011-08-25 08:24:47 必火贴!
    对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理
    关注
    kobiko
    kobiko
    本版等级:
    #13 得分:1 回复于: 2011-08-25 08:29:24 路过
    对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理
    关注
    gahyyai
    冰岛男孩
    本版等级:
    #14 得分:1 回复于: 2011-08-25 08:31:45 路过,路过,学习学习,顶顶
    对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理
    关注
    findcaiyzh
    宝_爸
    本版等级:
     
    #15 得分:1 回复于: 2011-08-25 08:32:12 原创吗,写的不错。
    对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理
    关注
    theillusion
    theillusion
    本版等级:
    #16 得分:1 回复于: 2011-08-25 08:37:53 不同意楼主的说法,初学者最好直接接触asp mvc和http协议,避免成为楼主说的“控件的熟练使用者”。原因不在于技术,asp mvc和webform并无本质不同,它们的基础对象都是一样(Context,Request,Repsonse),用webform一样可以实现mvc模式。问题在于人,开发者最初迈出的那一步,对他的方向和习惯影响非常大,当他习惯了控件的小甜头之后,会没有耐心了解底层的原理。
    对我有用[4]  丢个板砖[0]  引用 |  举报 |  管理
    关注
    songjiedai
    songjiedai
    本版等级:
    #17 得分:1 回复于: 2011-08-25 08:38:40 恩,不错,学习,支持原创
    对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理
    关注
    theks
    theks
    本版等级:
    #18 得分:1 回复于: 2011-08-25 08:41:45 总结得好,一直就有这感觉。。
    对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理
    关注
    xuzhenshun
    超神肉肉
    本版等级:
    #19 得分:1 回复于: 2011-08-25 08:49:40 ...........................
    我现在正努力成为控件熟练者!
    对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理
    关注
    theillusion
    theillusion
    本版等级:
    #20 得分:1 回复于: 2011-08-25 08:57:37 asp mvc 和 entity framework 没有关系,一个是领域层前面的应用层,一个是领域层后面的持久化技术,两者风马牛不相及。如果硬说它们有关系,那也是食客和饭馆的关系,方便而已。asp的本质仅仅是对web请求上下文的封装,不要赋予他过多的含义,否则就回到了webform的老路上。
    对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理
    关注
    guolucky2003
    guolucky2003
    本版等级:
    #21 得分:1 回复于: 2011-08-25 09:02:52
    引用 5 楼 moneysoft 的回复:
    当我们实现了一个业务,
    既可以用aspWebForm去呈现,
    也可以用html+js去呈现,
    也可以用winform,SL等其他UI平台去呈现,
    你只要为这几种UI准备相各自的通用的视图驱动器就可以了
    这才是MVC的,

    aspMVC,要是非要往MVC上扯的话,充其量算作一个html+js的视图驱动器空壳,
    而微软并没有提供和数据分离的,动态的驱动界面的手段,

    不要说得那么抽象,一点也看不明,说了等于没说
    对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理
    关注
    lixiankun001
    lixiankun001
    本版等级:
    #22 得分:1 回复于: 2011-08-25 09:07:03 路过学习,MVC 3很有鸭梨啊
    对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理
    关注
    jyk
    金色海洋_
    本版等级:
    #23 得分:1 回复于: 2011-08-25 09:09:17 写的非常好!
    太棒了。

    完全赞同lz的观点。
    对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理
    关注
    zzxap
    zzxap
    本版等级:
     
    #24 得分:1 回复于: 2011-08-25 09:10:54 mvc怎么会不适合初学者了
    对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理

    关注
    gzdiablo
    gzdiablo
    本版等级:
    #25 得分:1 回复于: 2011-08-25 09:16:36 MVC只是个概念,ASP.NET的MVC框架确实有MVC的概念。
    所谓概念只是一种方法,当然使用webform的同学们只要避免使用webform控件再加上ajaxpro等ajax框架。
    也可以轻松实现MVC的思想。同时也可以应用webform的其他特性。

    我认为MVC思想可以学,但没必要追求MVC框架,不过可以学习一下其中优秀的部分。例如清晰的模块化设计思想。

    另外个人觉得MVC框架只是个工具与LINQ一样,与其钻研这个。不如真正的把应用层面的基础打好。例如LZ说的HTML5/websocket 之类的才是真正需要钻研的。

    更多推荐

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