了解传统的ASP.NET WebForm

ASP.NET 在02年问世,给Web开发领域带来了巨大转变。下图描述了当时微软的技术堆栈。

ASP.NET WebForm 技术堆栈

(注:此图的含义为,Web Form 建立在ASP.NET 之上,而ASP.NET 又建立在.NET 平台上,MVC所起的作用是替代这里的Web Form。)

学习MVC之前,我们先了解一下传统的ASP.NET WebForm有哪些缺点。

首先如果问你什么是ASP.NET WebForm,这里可能会有人觉得有点懵。生活往往就是这样,有些东西我们心里明明清楚是那么一回事,但就是不知道怎么用语言来表述。

好了话不多说,先上一段个人觉得比较通俗易懂的解释。

  • 作用于将用户界面(UI)模拟为服务器端控件对象层的办法,微软试图利用WebForm 把HTTP(具有无状态本质)和HTML都隐藏起来。每个控件在请求期间都跟踪自己的状态(通过ViewState),在需要时把自己渲染成HTML,并自动地将客户端事件(如按钮点击)与相应的服务器端事件处理代码相关联。结果,Web From被设计成Web上传递传统事件驱动式GUI(图形用户界面)的一个巨大的抽象层。其思想是,让Web开发在感觉上与Windows Form开发相同。开发者不再需要以一些列独立的HTTP请求和响应进行工作,可以认为它是一种状态话UI。我们可以忘记Web及其无状态本质,转而用一种(拖——放)式设计器来创建UI,并假象或至少假装,所有的事情都发生在服务器上。

1.传统的ASP.NET WebForm 开发曾是一种了不起的思想,但是事实证明它更加复杂。随着时间的推移,Web Form在实际项目中显现出了一些缺陷:

  • 视图状态负荷

传统的ASP.NET WebForm模式利用ViewState保存表单的状态信息,由于B/S程序本身的限制,ViewState存储数据需要在隐藏表单域里面放置很大一段字符串,这回大大增加页面的字节数,导致网页加载变慢。

  • 页面生命周期

页面生命周期过于复杂。比如控件的Init事件在Page的Init事件之前执行,而Load事件是控件后执行。事件处理的事件

  • HTML上的受限制

服务器控件将自己渲染成HTML,但并不是我们所期望的那种必要的HTML。 在ASP.NET 4之前,这种HTML输出通常不符合Web标准,或不能很好地使用CSS。而且,服务器控件会生成不可预测的且复杂的ID值,结构这些ID很难用JavaScript进行访问。

  • 关注分离做的不好

Webform开发是一个页面对应一个code-behind class,原本的目的是将展示和逻辑分离。但是在实际开发的时候,面对某些需求,还是经常会在class中写一些控制界面展示的代码。

  • 低可测性

页面和code-behind class绑定在一起,无法单独对逻辑进行测试;不支持单元测试。

当然ASP.NET一直在不断改进,版本2.0添加了一组标准的应用程序组件,可以减少开发者需要编写的代码量。2007年发布的AJAX是微软对Web 2.0/AJAX疯狂时代的回应,它支持富客户端交互,同时简化了开发者的工作,最新版的4.0能够生成等易于预测且与标准兼容的HTML标记,但依然存在许多内在的局限性。

ASP.NET MVC

ASP.NET MVC的优点如下:

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

下一课再深入的讲解MVC的一些知识。

MVC自学第一课的更多相关文章

  1. MVC自学第二课

    鉴赏一个软件开发框架最好的办法是投入其中并使用它.本课将使用ASP.NET MVC框架创建一个简单的数据录入应用程序.为简化起见,本课涉及到的一些技术细节在这里可能会跳过,会在以后的课程中再详细说明. ...

  2. C++自学第一课:函数

    此贴并非教学,主要是自学笔记,所述内容只是些许个人学习心得的记录和备查积累,难以保证观点正确,也不一定能坚持完成. 如不幸到访,可能耽误您的时间,也难及时回复,贴主先此致歉.如偶有所得,相逢有缘,幸甚 ...

  3. 微信小程序自学第一课:工程目录结构与.json文件配置

    注册成为开发者 地址: https://mp.weixin.qq.com/cgi-bin/wx 开发者工具下载地址 https://mp.weixin.qq.com/debug/wxadoc/dev/ ...

  4. HTML5 —— 自学第一课

    1.心得 首先遇见问题要寻根源,而不是将问题抛出:其次要经常查看参考文档.参考示例:学会百度. 2.技能需求 HTML5.XHTML.CSS3.JavaScript.jQuery(jQuery-UI/ ...

  5. Laravel自学第一课:laravel下载与安装

    本地安装laravel,php环境要配置好,推荐xmapp一键搭建. 1.程序包直接从官方下载,官方开源地址:https://github.com/laravel/laravel(当然也可从此网站:h ...

  6. 2011斯坦福大学iOS应用开发教程学习笔记(第一课)MVC.and.Introduction.to.Objective-C

    blog.csdn.net/totogo2010/article/details/8205810  目录(?)[-] 第一课名称 MVC and Introduction to Objective-C ...

  7. C++自学教程第一课——你好世界,我是柠檬鲸。

    C++系列教程现在在自己学校的一个博客平台发布,几个朋友一起搭建的 [C++基础教程系列](https://blog.ytmaxoj.org/cpp_basic_liuary-0/) 下面是原来的正文 ...

  8. CodeIgniter框架入门教程——第一课 Hello World!

    本文转载自:http://www.softeng.cn/?p=45 今天开始,我将在这里连载由我自己编写的<CodeIgniter框架入门教程>,首先,这篇教程的读着应该是有PHP基础的编 ...

  9. 【C语言探索之旅】 开宗明义及第一课:什么是编程?

    内容简介 1.课程大纲 2.第一部分第一课:什么是编程? 3.第一部分第二课预告:工欲善其事,必先利其器 ​ 课程大纲 不知道为什么,一直对C语言有一种很深厚的“情怀”(类似老罗对锤子手机的那种),说 ...

随机推荐

  1. Linux下配置VNC

    1.确认是否安装vnc服务端 : rpm -q tigervnc-server 默认是没有安装的,需要在Linux系统文件Packages文件夹找到vnc安装包(里面有两个分别是客户端与服务端)tig ...

  2. HDU 3030 - Increasing Speed Limits

    Problem Description You were driving along a highway when you got caught by the road police for spee ...

  3. mysql优化(2) 观察mysql进程状态

    环境准备,安装sysbench wget http://nchc.dl.sourceforge.net/project/sysbench/sysbench/0.4.12/sysbench-0.4.12 ...

  4. map循环

    Map<String,  String> maps = new HashMap<String, String>(); maps.put("_id", &qu ...

  5. Android Canvas不能换行,或者不识别\n,\r\n的解决方案

    在使用Canvas绘制文本的时候,如果要绘制的字符串含有\r\n,\n换行的时候,会识别不出来,当成空格绘制出来. 解决方案: 1.使用StaticLayout来实现,具体代码如下: TextPain ...

  6. Gesture(手势)浅析

    1.Gesture的作用 ①在触摸屏上的连续触摸行为,形成某个方向上的移动趋势  (利用手势检测) ②连续画出一个不规则的行为  (利用增加手势) 2.手势检测(GestureDetector) // ...

  7. codeforces 702E Analysis of Pathes in Functional Graph 倍增

    题目链接 给一个图, 然后给出每条边的权值和一个k值. 让你求出从每个点出发, 走k次能获得的边权的和以及边权的最小值. 用倍增的思想, 求出每个点走一次能到达的点, 权值和以及最小值, 走两次..四 ...

  8. Android显示YUV图像

    需要流畅显示YUV图像需要使用Opengl库调用GPU资源,网上在这部分的资料很少.实际上Android已经为我们提供了相关的Opengl方法 主体过程如下: 1.建立GLSurfaceView 2. ...

  9. vi/vim 键盘

  10. CSS自学笔记(9):CSS拓展(二)

    CSS图片 当一个网页上有一张或多张图片,而且这些图片的尺寸比较大时,为了是网页布局更紧凑合理,我们可以将这些图片放到一个图片库里,可以有效的防止图片过大可能会对网页布局造成的不良影响. 通过CSS我 ...