MVC自学第一课
了解传统的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自学第一课的更多相关文章
- MVC自学第二课
鉴赏一个软件开发框架最好的办法是投入其中并使用它.本课将使用ASP.NET MVC框架创建一个简单的数据录入应用程序.为简化起见,本课涉及到的一些技术细节在这里可能会跳过,会在以后的课程中再详细说明. ...
- C++自学第一课:函数
此贴并非教学,主要是自学笔记,所述内容只是些许个人学习心得的记录和备查积累,难以保证观点正确,也不一定能坚持完成. 如不幸到访,可能耽误您的时间,也难及时回复,贴主先此致歉.如偶有所得,相逢有缘,幸甚 ...
- 微信小程序自学第一课:工程目录结构与.json文件配置
注册成为开发者 地址: https://mp.weixin.qq.com/cgi-bin/wx 开发者工具下载地址 https://mp.weixin.qq.com/debug/wxadoc/dev/ ...
- HTML5 —— 自学第一课
1.心得 首先遇见问题要寻根源,而不是将问题抛出:其次要经常查看参考文档.参考示例:学会百度. 2.技能需求 HTML5.XHTML.CSS3.JavaScript.jQuery(jQuery-UI/ ...
- Laravel自学第一课:laravel下载与安装
本地安装laravel,php环境要配置好,推荐xmapp一键搭建. 1.程序包直接从官方下载,官方开源地址:https://github.com/laravel/laravel(当然也可从此网站:h ...
- 2011斯坦福大学iOS应用开发教程学习笔记(第一课)MVC.and.Introduction.to.Objective-C
blog.csdn.net/totogo2010/article/details/8205810 目录(?)[-] 第一课名称 MVC and Introduction to Objective-C ...
- C++自学教程第一课——你好世界,我是柠檬鲸。
C++系列教程现在在自己学校的一个博客平台发布,几个朋友一起搭建的 [C++基础教程系列](https://blog.ytmaxoj.org/cpp_basic_liuary-0/) 下面是原来的正文 ...
- CodeIgniter框架入门教程——第一课 Hello World!
本文转载自:http://www.softeng.cn/?p=45 今天开始,我将在这里连载由我自己编写的<CodeIgniter框架入门教程>,首先,这篇教程的读着应该是有PHP基础的编 ...
- 【C语言探索之旅】 开宗明义及第一课:什么是编程?
内容简介 1.课程大纲 2.第一部分第一课:什么是编程? 3.第一部分第二课预告:工欲善其事,必先利其器 课程大纲 不知道为什么,一直对C语言有一种很深厚的“情怀”(类似老罗对锤子手机的那种),说 ...
随机推荐
- Linux下配置VNC
1.确认是否安装vnc服务端 : rpm -q tigervnc-server 默认是没有安装的,需要在Linux系统文件Packages文件夹找到vnc安装包(里面有两个分别是客户端与服务端)tig ...
- HDU 3030 - Increasing Speed Limits
Problem Description You were driving along a highway when you got caught by the road police for spee ...
- mysql优化(2) 观察mysql进程状态
环境准备,安装sysbench wget http://nchc.dl.sourceforge.net/project/sysbench/sysbench/0.4.12/sysbench-0.4.12 ...
- map循环
Map<String, String> maps = new HashMap<String, String>(); maps.put("_id", &qu ...
- Android Canvas不能换行,或者不识别\n,\r\n的解决方案
在使用Canvas绘制文本的时候,如果要绘制的字符串含有\r\n,\n换行的时候,会识别不出来,当成空格绘制出来. 解决方案: 1.使用StaticLayout来实现,具体代码如下: TextPain ...
- Gesture(手势)浅析
1.Gesture的作用 ①在触摸屏上的连续触摸行为,形成某个方向上的移动趋势 (利用手势检测) ②连续画出一个不规则的行为 (利用增加手势) 2.手势检测(GestureDetector) // ...
- codeforces 702E Analysis of Pathes in Functional Graph 倍增
题目链接 给一个图, 然后给出每条边的权值和一个k值. 让你求出从每个点出发, 走k次能获得的边权的和以及边权的最小值. 用倍增的思想, 求出每个点走一次能到达的点, 权值和以及最小值, 走两次..四 ...
- Android显示YUV图像
需要流畅显示YUV图像需要使用Opengl库调用GPU资源,网上在这部分的资料很少.实际上Android已经为我们提供了相关的Opengl方法 主体过程如下: 1.建立GLSurfaceView 2. ...
- vi/vim 键盘
- CSS自学笔记(9):CSS拓展(二)
CSS图片 当一个网页上有一张或多张图片,而且这些图片的尺寸比较大时,为了是网页布局更紧凑合理,我们可以将这些图片放到一个图片库里,可以有效的防止图片过大可能会对网页布局造成的不良影响. 通过CSS我 ...