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语言有一种很深厚的“情怀”(类似老罗对锤子手机的那种),说 ...
随机推荐
- C# 7 函数 青歌赛打分 天气预报
函数: 数据类型--变量常量--运算符表达式--语句(顺序,分支,循环)--数组--函数 程序里的函数:能完成一个相对独立功的代码块. 数学里的函数:高度抽象. 函数四要素:函数名,输入,输出,加工 ...
- javascript 数据结构和算法读书笔记 > 第五章 队列
队列是一种列表,但是它只能够在队尾插入元素,在队首删除元素.队列用于存储按照顺序排列的数据,先进先出.而栈则是后入栈的元素反而被优先处理. 实际中一般被应用在进程池.排队操作上面. 1. 队列的操作 ...
- BASH 进阶(转载防丢)
基础 学习 Bash 的基础知识.具体来说,输入 man bash 并至少全文浏览一遍; 它很简单并且不长.其他的 shell 可能很好用,但 Bash 功能强大且几乎所有情况下都是可用的 ( 只学习 ...
- SQL Server 数据库游标选项
背景: 游标控制服务器端游标的行为,相关的T-SQL如下: declare , open , fetch , close , deallocate. 1. cursor_close_on_commit ...
- webstrom 常用快捷键
最近在学习javascript,同时发现了一款非常好用的IDE webstrom 现在记录改IDE的快捷键 1. ctrl + shift + n: 打开工程中的文件,目的是打开当前工程下任意目录的文 ...
- python 学习day5(模块)
一.模块介绍 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能 ...
- Struts2技术详解(转)
1, 当Action设置了某个属性后,Struts将这些属性封装一个叫做Struts.valueStack的属性里.获取valueStack对象: ValueStack vs = (ValueStac ...
- PixelFormat 图像颜色的数据格式
PixelFormat: (指定图像中每个像素的颜色数据的格式) Delphi 微软 ...
- Codeforces 293B
Codeforces 293B 原题 题目描述:给出一个\(n \times m\)的网格, 给定一个整数\(k\),网格上的每个数都不超过\(k\),其中有的格子是\(0\),要求把这些格子变成\( ...
- Multipart/form-data POST文件上传详解(转)
Multipart/form-data POST文件上传详解 理论 简单的HTTP POST 大家通过HTTP向服务器发送POST请求提交数据,都是通过form表单提交的,代码如下: <form ...