ASP.NET MVC的流程讲解

发布时间:2017-09-08 23:34:19
ASP.NET MVC的流程讲解

开始想这个标题的时候,很是忧郁到底叫什么标题会比较好哪,最后还是确定为讲解,虽然略显初级,但是很多概念,想通了还是比较有价值的。废话略过,开始!

1、MVC的基本开发流程

2、webform和MVC的选择

3、MVC的内部过程

1、MVC的开发流程

MVC的出现时微软在2009年左右开始提出的网站开发的新的发展方向,这个方面的开发官方解释是可以比较好的实现三层分离,而且分离之后,可以实现复用等相关好处,通常人们列举的例子是ui方面可以同时支持HTML网络或者WAP网络。但是其实个人的理解是,动态网站的开发经过不断地证实和发展,java的struts模型,可以提高开发速度,也可以降低差多,是比较好的框架,而微软也需要提供自己的开发框架。不能够只是一个界面一个界面的设计方式,设计模式逐步进入到了web开发的领域。

MVC使用vs2010进行开发时(这里介绍的是MVC2),首先需要选在一个模板,然后vs2010会帮忙创建好对应的目录结构。



每个目录的基本功能:

Content:主要用于描述css之类的资源

Controllers:主要就是controller的存放位置,创建controller时,都是需要在该目录创建的。

Models:主要就是entity的具体位置,以及跟entity相关的操作类

Scripts:javascript脚本存放的位置

Views:该部分主要是放置view显示部分的

Global.asax:目前来看,该部分主要就是路由设置

Web.config:该配置文件而已


从开发的流程方面来看,MVC的开发方式,或者说思考的方式出现了变化,在MVC当中,需要理解一个重要的点是:

Controller才是系统的中心,一切围绕Controller展开。

Model:所谓模型,可以理解为数据,这个数据可以是数据库中对应的表中的数据,这种数据是只有属性,而没有动作的,这种数据通常也被称之为Entity,即实体,除了这种数据之外,MODLE起始还要包括Interface,这些接口的目标是提供可以控制Entity的接口标准,然后在提供实现的载体,通常我们称之为Mock类,为了方便,可能我们还会在Model当中创建各种factory,从而简化对象的创建。

Controller:这个部分就是核心了,其实所谓核心,是说所有的处理,全部围绕着Controller展开,它的主要工作是访问model,获取数据后,将参数转发给view,站群软件,然后让view表现出来。在这里主要完成的工作有两点:

1、在客户端访问一个页面后,需要跳转到Controller对应的action中去,然后在action中处理对应的view显示出来。

2、 完成客户的表单提交相应处理,也就是Form表单处理。(还记得之前讲过,对于HTML而言,只有Form表单实现了客户端的信息发送给服务端,然后由服务端处理相关的相应,因为MVC的设计目标就是放弃了微软原有的服务器控件,因此一切回归原始,采用HTML的form表单方式实现提交和相关的控制处理。)

View:顾名思义,该部分就是现实的部分,这个部分需要时刻记住的是,这个view虽然也是aspx的页面,但是已经发生了根本性的变化,不再有所谓的codebeind代码了,这个view的所有变成将采用混合式的变成,你会注意到这个部分的变成变为HTML与C#的混合,会出现很多的类似的代码。很多人起始对这个部分有不同的开发,混合代码对于分层不利,但是在MVC中,因为不涉及逻辑,所以view的表现变得简单,混合编程会变为可以接受的处理方式。另外,这种方式带来的好处是,美工可以介入了,他们的修改对于程序员来说,没有什么特别,也是非常容易直接引入的。带来的坏处是Gridview这种强大的服务器控件被丢弃了。虽然是这样,但是我个人觉得,这是回到了web开发的本质。他的思想,与JSP,PHP等等变为一致。

Golabal.asax:路由表,这个部分就是所谓的全局路由表。在MVC框架中,之所以实现了MVC功能,一个重要的概念是路由表,该部分实现了地址访问的动态,不再提供具体页面的访问模式。

注意:给我的感觉是,记住在view目录和model目录中,添加子目录,每个controller对应的view,都是一个目录下的view。这个是MVC框架查找时自动搜索的。

2、webform和MVC的选择

这个部分的争论,我想从微软开始推出MVC框架后,大家就在不间断的讨论着,不同的人,给出的看法也是不同,就我个人而言,我觉得MVC才是未来趋势,是世界最后大同的根本。尽管web form的模式,是微软开创性的创造,但是毕竟web开发不是微软首创,很多时候,大势所趋而已。我这里只是想谈谈两者的思想出发点的差别:

webform模式,这个模式的思维基础,是微软在桌面开发中取得了前所未有的成功,这些成功,微软希望复制到网络开发中,何为form,就是窗口开发,这种框架的逻辑是所见即所得+事件处理,微软希望可以将web实现为桌面开发的模式,但是网络开发的基础是HTML和HTTP协议,这两个部分带来的问题是HTML表现元素有限,并且只能够通过form与后台服务器通信。另外,HTTP协议无状态,无法实现消息机制,为了解决这些问题,微软创造了新的开发模式,引入ASP.NET服务器控件,实现了丰富的控件,通过postback回传机制,实现了事件模型,通过codebehind技术实现web页面与C#代码的分离。上述技术,的确非常成功,也确实很大程度上简化了web的开发,但是随着发展,带来了问题,就是webform的开发基础是页面化的,这种思维模式是说你开一个页面,然后在这个页面写响应事件,但是这种模式对于频繁变化的web程序缺乏良好的复用性,并且,前端人员开发的界面,往往在合成时,需要重做,这是微软自己创造的困难,这是一种以Page为中心的开发思想。
MVC模式,这个模式的思维基础,是分工清晰,以Controller为核心,在开发时可以先做model再做Controller,最后做view,通过使用demo view实现,最后再替换美工的view。这种模式变成了以数据为中心的开发思想。最大的好处是,这种模式中每个部分都可以灵活复用,最大限度的实现现在的各种网络需要,比如互联网和移动互联网。而且,其他的变成语言,在思想方面也基本采用这种模式,这种模式最终被时间证明,成为了标准思考方式和开发方式。微软提倡的桌面化开发,渐渐退却往日之光芒。 3、MVC的内部过程

这个部分是个非常核心的问题,本文除了自己理解,还大量引用了其他相关的文章。尝试讲解清楚MVC的基本运转流程。

MVC的主体过程:

问题:

1、 浏览器请求的地址,并不是具体的某个页面,如1234.aspx页面,而是controller/action方法,这是如何做到的?

2、 Controller被访问到以后,如何找到具体的view进行返回的?

我个人的理解就是回答了上述的问题,也就解释清楚了MVC的基本框架。

第一个问题,浏览器请求地址的问题,MVC之所以能够找到具体的Controller是因为有一个route组件,实现了路由处理的功能,将请求转化为Controller的具体方法。需要注意该组件居然是个独立组件。

Routing的作用:

1、 解析URL,识别当中的参数

2、 解析之后,调用具体的controller和action

比如首页地址是: localhost/home/index

我们发现访问上面的地址, 最后会传递给 HomeController中名为index的action(即HomeController类中的index方法).

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:黄冈网站建设 http://huanggang.45qun.com