ASP.NET WebForm

ASP.NET Webform提供了一个类似于winform的事件响应GUI模型(event-driven GUI),隐藏了HTTP、HTML、JavaScript等细节,将用户界面构建成一个服务器端的树结构控件(Control),每个控件通过ViewState保持自己的状态,并自动把客户端的js事件和服务器端的事件联系起来。这种做法使得开发WinForm和WebForm程序具有相近的开发体验,填平WinForm开发(有状态、面向对象的)和WebForm开发(无状态、面向HTML的)之间的鸿沟。

这种设计在大型网站开发的时候,暴露出一系列弱点:

  1. ViewState可能过大。访问量非常大的情况下,viewstate占用的流量相当可观,这样直接影响页面传输速度。
  2. Page Life Cycle:过于复杂。比如控件的Init事件在Page的Init事件之前执行,而Load事件是控件后执行。事件处理的事件
  3. 缺乏对HTML的控制:一般每个控件负责自己的HTML输出,开发人员无法修改输出的HTML结构,除非自己写控件。而且HTML元素的ID比较复杂,也不便于js访问。
  4. 界面设计和逻辑开发的关注分离做的不好:Webform开发是一个页面对应一个code-behind class,原本的目的是将展示和逻辑分离。但是在实际开发的时候,面对某些需求,还是经常会在class中写一些控制界面展示的代码。
  5. 对测试的支持不好:页面和code-behind class绑定在一起,无法单独对逻辑进行测试;不支持单元测试。

ASP.NET MVC

ASP.NET MVC的优点如下:

  1. 采用MVC架构:分离了关注点,比如开发Controller的时候,只需关注如何处理交互,从request中获得什么数据,业务逻辑交给Model处理,还需要把哪些数据传给页面用于展示,如何展示交给View处理。
  2. 更好的扩展性:ASP.NET MVC框架由一些列独立的组件构成,你可以轻松替换,如路由系统、the View Engine、the controller factory或者其它框架的组件。
  3. 更好的可测性:关注点的分离另外一个好处就是更好的可测性。
  4. 能够完全控制输出的HTML。
  5. 强大的路由功能。

参考

  1. Pro ASP.NET MVC Framework
    1. http://www.asp.net/mvc
    2. http://aspnetwebstack.codeplex.com/
  2. ASP.NET Web Forms Weaknesses
  3. MVP模式
  4. Monorails
    1. http://yok.cnblogs.com/archive/2005/11/05/269383.html
    2. http://www.cnblogs.com/firstyi/category/108880.html
  5. Ruby on Rails
    1. http://www.cnblogs.com/hardrock/archive/2006/08/18/480668.html
    2. http://www.cnblogs.com/dahuzizyd/category/97947.html

ASP.NET Webform和ASP.NET MVC的区别的更多相关文章

  1. .net mvc 站点自带简易SSL加密传输 Word报告自动生成(例如 导出数据库结构) 微信小程序:动画(Animation) SignalR 设计理念(一) ASP.NET -- WebForm -- ViewState ASP.NET -- 一般处理程序ashx 常用到的一些js方法,记录一下 CryptoJS与C#AES加解密互转

    .net mvc 站点自带简易SSL加密传输   因项目需要,传输数据需要加密,因此有了一些经验,现简易抽出来分享! 请求:前端cryptojs用rsa/aes 或 rsa/des加密,后端.net ...

  2. 性能差异 ASP.NET WebForm与ASP.NET MVC

    一.为什么说 ASP.NET WebForm 比 ASP.NET MVC 要差? WebForm 顾名思义,微软一向主打简单化,窗体模式,拖拽控件就能做网站了, 然而这也引发了许多 Java 和 .N ...

  3. ASP.NET WebForm与ASP.NET MVC的不同点

    ASP.NET WebForm ASP.NET MVC ASP.NET Web Form 遵循传统的事件驱动开发模型 ASP.NET MVC是轻量级的遵循MVC模式的请求处理响应的基本开发模型 ASP ...

  4. 关于ASP.NET WebForm与ASP.NET MVC的比较

      WebForm的理解 1. WebForm概念 ASP.NETWebform提供了一个类似于Winform的事件响应GUI模型(event-drivenGUI),隐藏了HTTP.HTML.Java ...

  5. Asp.net: WebForm基础上构建Mvc的方法

    添加引用: System.Web.Routing System.Web.Abstractions System.Web.Mvc 添加文件夹: Controllers, Views,  Views / ...

  6. ASP.NET Webform或者ASP.NET MVC站点部署到IIS下,默认情况下.json文件是不能被访问的,如果请求访问.json文件,则会出现找不到文件的404错误提示

    解决方法 <system.webServer> <staticContent> <remove fileExtension=".woff" /> ...

  7. asp.net中三层架构与mvc之区别?

    对于标题中的问题,如果是没有同时接触三层架构和mvc的初级.net开发人员,想必一定会非常糊涂和混淆.关于此我也百度过N回,看过N多帖子和 回答,但几乎没有人能表述清楚.近期我从典型mvc+entit ...

  8. 【深入ASP.NET原理系列】--Asp.Net Mvc和Asp.Net WebForm共用一套ASP.NET请求管道

    .NET FrameWork4在系统全局配置文件(如在如下目录中C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config) 中添加了一个名字叫Url ...

  9. ASP.NET WebForm / MVC 源码分析

    浏览器 Url:https//localhost:6565/Home/Index ,https//localhost:6565/WebForm1.aspx,请求服务器(构建请求报文,并且将请求报文发送 ...

随机推荐

  1. [原创]java WEB学习笔记58:Struts2学习之路---Result 详解 type属性,通配符映射

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  2. Appium的理念

    1.Appium的架构:C/S模式 Appium的核心是暴漏REST API的WebServer,appium接收来自客户端的连接请求,监听由客户端发起的命令,在移动设备上执行这些命令,这些命令的执行 ...

  3. jsp页面中的java代码

    jsp页面中的java代码 1.jsp表达式  <%= ....%>  只能放置一个变量常量 2. jsp小脚本 <% .... %>  java语句,可以插入一些语句 3. ...

  4. bzoj1758 [Wc2010]重建计划 & bzoj2599 [IOI2011]Race

    两题都是树分治. 1758这题可以二分答案avgvalue,因为avgvalue=Σv(e)/s,因此二分后只需要判断Σv(e)-s*avgvalue是否大于等于0,若大于等于0则调整二分下界,否则调 ...

  5. js 去除空格

    var MAX_PERIOD = $('#MAX_PERIOD').val(); // 借款的最大期限 MAX_PERIOD=Trim(MAX_PERIOD,"g");   //带 ...

  6. zw版【转发·台湾nvp系列Delphi例程】HALCON HWindowX 02

    zw版[转发·台湾nvp系列Delphi例程]HALCON HWindowX 02 procedure TForm1.Button1Click(Sender: TObject);var img : H ...

  7. FreeOnTerminate 的线程在线程管理类的Destroy释放时手工释放的问题

    这个问题折腾了我整整一天. 有一个线程管理类,集中管理所有新建的线程, 线程统一在创建时标识 FreeOnTerminate 为 True. 因为有的线程是不限次循环的,所以在管理类最后 Destro ...

  8. MySQL rename database如何做?

    虽然MySQL里面有rename database的语法,但是只是在5.1.7 to 5.1.23提供的,其他版本并没有,要想做rename操作该如何做呢?percona提供了一个shell #!/b ...

  9. 160921、React入门教程第一课--从零开始构建项目

    工欲善其事必先利其器,现在的node环境下,有太多好用的工具能够帮助我们更好的开发和维护管理项目. 我本人不建议什么功能都自己写,我比较喜欢代码复用.只要能找到npm包来实现的功能,坚决不自己敲代码. ...

  10. Linux驱动中completion接口浅析(wait_for_complete例子,很好)【转】

    转自:http://blog.csdn.net/batoom/article/details/6298267 completion是一种轻量级的机制,它允许一个线程告诉另一个线程工作已经完成.可以利用 ...