ASP.NET MVC与ASP.NET WebForm

     ASP.NET MVC是微软公司的一款WEB开发框架,整合了“模型-视图-控制器”架构的高效与整洁,是敏捷开发最现代的思想与技术。它是传统ASP.NET WebForm的一个完善的替代品。浏览器

一、当今的Web开发服务器

     1)REST(Representational State Transfer)已经成为应用程序在HTTP上互操做的主要体系架构,彻底使SOAP失色。REST是根据表示真实世界实体的资源(URI)和表示在这些资源上可用的标准操做方法(HTTP方法)来描述一个应用程序。经过HTTP方法与资源地址的组合就能够对资源执行相应的操做,这种组合就是REST,执行这种操做的请求也称为REST化的请求。(对于REST的理解我的仍是不透彻,后面会对此概念进行补充架构

当前的Web应用程序不仅是提供HTML服务,一般也须要将XML或JSON数据提供给用户,而WebForm很难支持。app

     2)整个软件行业向着敏捷与测试驱动开发方向的发展,如单元测试工具(NUnit、xUnit)、模仿框架(Moq、Rhino、Mocks)、控制反转容器(Ninject、AutoFac)、持续集成服务器(CruiseControl、TeamCity)、对象关系映射器(NHibernate、Subsonic、EF、Dapper、Petapoco)、UI自动化工具的提供。(测试驱动开发TDD思想:首先描述想要获得的行为范例,称为测试规范;而后进行软件设计,这样经过执行依附于这一实现的一套测试,来验证应用程序的稳定性和正确性框架

     3)顺应Web标准和REST化的趋势。工具

二、ASP.NET WebForm的历史与问题单元测试

     ASP.NET WebForm的技术堆栈,以下图所示:测试

    

     此图的含义是WebForm创建在ASP.NET之上,而ASP.NET又创建在.NET平台之上,MVC框架所起的做用是替代WebForm。ui

     WebForm的设计思想是,让Web开发在感受上与Windows Form开发相同。开发者再也不须要以一系列独立的HTTP请求与响应进行工做,能够认为它是一种状态化的UI,人们能够忘记WEB及其无状态本质,转而用一种“拖--放”式设计器来建立UI,并设想全部事情都发生在服务器上。搜索引擎

     随着时间的推移,WebForm在实际项目中出现了一些缺陷:

     1)视图状态重负:维护状态的实际机制,也就是ViewState(视图状态)致使在客户端与服务器之间传输大块数据(达到几百KB),并且来回于每次请求之间,致使响应时间很慢,增长了服务器的带宽需求;

     2)页面生命周期:链接客户端与服务器端事件处理器代码的机制很复杂,对于应用程序运行期间很难进行维护;

     3)关注分离的错误理念:自己将代码从HTML提取出来,放到后台代码类中进行处理是很一种很好的方式,可是一些开发者在后台代码中将表现代码与应用业务逻辑混合在一块儿,致使最后代码混乱并难以维护;

     4)HTML的受限控制:服务器控件将本身渲染成HTML,但并非所但愿看到的HTML,在ASP.NET 4以前,并不能很好的使用CSS。同时会生成不可预知或复杂的ID,这样JavaScript就很难进行访问。

     5)有缺陷的抽象:WebForm试图尽可能隐去HTML和HTTP(这是经过WebForm的抽象层实现的)。当你实现本身的方法时,须要放弃这种抽象,迫使采起回发事件机制的逆向工程。因此这种抽象对于开发者而言就构成一个极大的障碍和挑战;

     6)低可测试性:WebForm的这种紧耦合体系结构并不适合于单元测试,对于集成测试也很具备挑战性;

三、ASP.NET MVC的特色

     1)ASP.NET MVC框架实现了MVC模式(MVC模式在1978年就已经提出来了),因为ASP.NET MVC极大的改善了关注分离,因此特别适用于Web应用程序。由于与MVC应用程序的交互遵循着用户动做与视图更替的天然周期,在这个周期中,假设视图是无状态的。这与支撑Web应用程序的HTTP请求与响应方式很是吻合。

     2)可扩展性,MVC框架被构建成一系列独立的组件,如路由系统、视图引擎、控制器工厂,你能够很容易地用一个本身的不一样实现来替换这些组件,一般有三种选择:

          a、使用组件现行的默认实现,此种能够知足大多数应用程序;

          b、派生默认实现的一个子类,以调整其行为;

          c、用接口或者抽象基类的一个新的实现来彻底替换该组件;

     3)HTML和HTTP上的严密控制,ASP.NET MVC会产生整洁与标准兼容的标记,其内置的HTML辅助器方法,能够产生与标准兼容的输出。ASP.NET MVC生成的页面不包含任何ViewState数据,这种对带宽的节约,能够极大的改善用户的体验,而且能够对浏览器与服务器之间传递的请求加以控制。

     4)可测试性,ASP.NET MVC应用程序不只能够进行单元测试,还能够与UI自动化测试工具良好协做。

     5)强大的路由系统,采用REST风格的路由方案,有以下好处:

          a、搜索引擎对URL中找到的关键词有明显的权重,对一样的关键词的搜索,极有可能会转向一个较为简单的URL地址;

          b、许多Web用户如今对URL有足够的领悟,而且愿意在浏览器的地址栏目中输入URL地址;

          c、当理解URL地址的结构后,人们才会更有可能连接它,并向其余人共享;

          d、此种URL结构并不会将应用程序的技术细节、文件夹、文件名称等结构暴露给互联网。对于底层实现能够自由修改,而不会破坏连接;

     6)创建在ASP.NET平台之上,一方面ASP.NET MVC是基于.NET平台的,所以能够灵活的使用任何.NET语言来编写代码,可使用普遍的.NET类库和大量的第三方.NET类库体系;另外一方面,已经造成的ASP.NET平台特性,如认证、成员、角色、配置文件、国际化等能够减小开发和维护Web应用程序所须要的代码量。

     7)ASP.NET MVC是针对.NET 4.X而创建的,所以它的API能够充分利用当前语言和运行时的创新,如await关键字、扩展方法、lambda表达式、匿名、动态类型、LINQ。

     8)ASP.NET MVC是开源的。

四、ASP.NET MVC与ASP.NET WebForm的比较

     首先须要说明的是,虽然ASP.NET MVC相对于ASP.NET WebForm来讲有一些优点,但这并不意味着前者要替代后者,也不意味着后者要消亡。

  • WebForm的观念是,UI应该是状态化的,其结果是,在HTTP和HTML之上添加一个抽象层,用视图状态(ViewState)和回发(Postback)来建立状态化的效果。这是一种“拖放”式Windows Form风格的开发。
  • MVC采纳了HTTP真正无状态的本质。MVC框架要求用户理解Web应用程序实际的工做方式,在理解的前提下,进行维护和扩展,提供一种功能强大、简单的、整洁的、现代的方法来编写Web应用程序,摆脱复杂的限制。
  • 因此说,开发小型的,企业内部型应用程序,能够考虑采用WebForm的方式来实现,但更多的时候,开发互联网应用程序或者大型的应用程序时,MVC不管从效率、兼容性、维护性都是一种更好的选择。

参考资料:《精通ASP.NET MVC X》

相关文章
相关标签/搜索