ASP.NET MVC深入浅出系列(持续更新)
一. ASP.NET体系
从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态模式,ViewState功不可没,通过的控件的拖拽和绑定,很快就可以搭建出来一个Web项目,其开发速度远胜Java、PHP,当年Web项目并不很重视体验,没有今天响应式,没有各种前端js框架,所以在当年的WebForm,微软是以引以为豪的。
该框架毕竟有时代局限性,随着前端的崛起,随着人们对项目体验的提高,随着项目的体量的增大,WebForm在当下强调松耦合、模块化、组件化的时代,略显落后,故微软于2009年推出第一个开源框架,即MVC框架,俗称ASP.Net MVC1,后面又陆续的推出 MVC2、3、4、5。现在最新的跨平台Web开发框架 Core MVC,它隶属于.Net Core框架,而非 .Net FrameWork下。
下面用一张图表示一下在Core出现之前,.Net在Web开发即ASP.NET中包含的内容。
简单分析一下:WebPages(没用过哎)、WebForms、MVC均为ASP.NET下的Web开发框架,WebAPI负责构建HTTP常规服务,SignalR负责构建实时服务。
MVC和WebAPI简单对比一下:MVC用来构建网站既关心页面又关心数据,WebAPI只关心数据;MVC通过可以通过Action的名字来接受CURD操作,而WebAPI通过HTTP的访问方式(GET、PUT、POST、DELETE)来表达不同的CURD操作。
(WebService、WCF、WebAPI、SignalR在后面会有单独的章节详细介绍)
二. WebForm和MVC对比
1. WebForm
做过WebForm开发的朋友们应该很清楚,WebForm开发形式主要分为三种:
①:服务器端控件,即拖拽控件(aspx)
②:一般处理程序(ashx) + html模板
③:html静态页 + ajax + 一般处理程序(ashx)
请求模型:
WebForm的几个臭名昭著的缺点:封装太强,导致开发不灵活;ViewState的无状态;声明周期模型复杂,对于初学者不易于理解。
2. MVC
我们经常从各种开发工程师(JAVA 、.NET、PHP)口中听到MVC,但不同人说的MVC貌似类似,但又有区别,那么MVC到底是什么呢?(类似的还有MVP和MVVM)
1. 从宏观上来说:MVC是框架分层的一种搭建思想,在最原始的项目中,没有什么框架分层之说,所有的项目代码都在一个层里,这样会导致代码冗杂,耦合性强,项目迭代升级困难,MVC是一种分层思想,将一个项目代码分为几类,分别放到不同的层里,Model层存储一些数据和业务逻辑,View层处理页面问题,Controller层用来接收人机交互指令。MVC分层思想和传统的三层(数据库访问层、业务逻辑层、表现层)还是有区别的。
MVC的核心是分离了View和Model(即页面和数据),Controller负责接收和发送指令,交给Model层处理。
2. 从.Net的角度来说,MVC是微软提供一个Web开发框架,全称ASP.NET MVC,它是传统三层中View层的一种功能细分,一种表现形式而已,与三层没有直接关系。ASP.NET MVC框架中的开发流程围绕:
① Model:存储实体类,实现系统中的业务逻辑。
② View:页面展示(Razor模板),展现给用户。
③ Controller:页面的逻辑处理,用来与用户的交互,处理接受的Http请求。然后从Model中获取相应的数据,转发给View进行页面展示。
补充:通过Controller中的Action,可以充当APP的服务端接口的作用,和WebAPI达到的效果一致,但访问方式是有区别的。
请求模型:
下面列举MVC框架的几个典型的优点:
①:松耦合,M-V-C分工明确,有利于代码的维护。
②:便于Seo优化,能自定义url的生成规则。
③:ASP.NET MVC5是个出色的表现层框架。
④:对单元测试支持友好。
三. ASP.Net MVC 框架
1. 包含的技术
ASP.NET MVC框架,这里以MVC5为例,涉及到的知识有:Model-View-Controller的使用、Area和Global的理解、路由配置、数据传递的方式、AOP思想的体现(4大过滤器),各种Result、Razor语法、HttpContext相关的五大对象、分布视图、特性的补充、Html扩展控件、Bundles压缩js和css的原理、Owin约束、管道模型及MVC的工作原理。
以及最新的Core MVC框架的相关知识。
2. 常见的约定
①:控制器命名通常以Controller结尾。
②:一个控制器对应一个View视图文件夹,常用页面都存放在里面。
四. 系列章节
!
- 作 者 : Yaopengfei(姚鹏飞)
- 博客地址 :
- 声 明1 : 本人才疏学浅,用郭德纲的话说“我是一个小学生”,如有错误,欢迎讨论,请勿谩骂^_^。
- 声 明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,如需代码请留言,加我QQ:604649488 (备注:评论的博客名)
上一篇: WPF 触摸屏小键盘样式
下一篇: Apache Maven(三):POM
推荐阅读
-
解读ASP.NET 5 & MVC6系列教程(1):ASP.NET 5简介
-
解读ASP.NET 5 & MVC6系列教程(2):初识项目
-
解读ASP.NET 5 & MVC6系列教程(3):项目发布与部署
-
解读ASP.NET 5 & MVC6系列教程(4):核心技术与环境配置
-
解读ASP.NET 5 & MVC6系列教程(7):依赖注入
-
解读ASP.NET 5 & MVC6系列教程(9):日志框架
-
解读ASP.NET 5 & MVC6系列教程(5):Configuration配置信息管理
-
解读ASP.NET 5 & MVC6系列教程(8):Session与Caching
-
解读ASP.NET 5 & MVC6系列教程(12):基于Lamda表达式的强类型Routing实现
-
解读ASP.NET 5 & MVC6系列教程(6):Middleware详解