ASP.NET MVC 4框架揭秘:Model 2
Model
Trygve M H Reenskau当初提出的MVC是作为基于GUI的桌面应用的架构模式并不太适合Web本身的特性 虽然MVC/MVP也可以直接用于ASP NET Web Forms应用 但这是因为微软就是基于桌面应用的编程模式来设计基于Web Forms的ASP NET应用框架的 Web应用不同于GUI桌面应用的主要区别在于 用户是通过浏览器与应用进行交互 交互请求和响应是通过HTTP请求和响应来完成的
为了让MVC能够为Web应用提供原生的支持 另一个被称为Model 的MVC变体被提出来 这来源于基于Java的Web应用架构模式 Java Web应用具有两种基本的基于MVC的架构模式 分别被称为Model 和Model Model 类似于我们前面提及的自治试图模式 它将数据的可视化呈现和用户交互操作的处理逻辑合并在一起 Model 使用于那些比较简单的Web应用 对于相对复杂的应用应该采用Model
为了让开发者采用相同的编程模式进行GUI桌面应用和Web应用的开发 微软通过ViewState和Postback对HTTP请求和回复机制进行了封装 使我们能够像编写Windows Forms应用一样采用事件驱动的方式进行ASP NET Web Forms应用的编程 而Model 采用完全不同的设计 它让开发者直接面向Web 让他们关注HTTP的请求和响应 所以Model 提供对Web应用原生的支持
对于Web应用来说 和用户直接交互的UI界面由浏览器来提供 用户交互请求通过浏览器以HTTP请求的方式发送到Web服务器 服务器对请求进行相应的处理并最终返回一个HTTP回复对请求予以响应 接下来我们详细讨论作为MVC的三要素是如何相互协作最终完成对请求的响应的 图 所示的序列图体现了整个流程的全过程
图 Model 交互流程
Model 中一个HTTP请求的目标是Controller中的某个Action 后者体现为定义在Controller类型中的某个方法 所以对请求的处理最终体现在对目标Controller对象的激活和对相应Action方法的执行 一般来说 Controller的类型和Action方法的名称以及作为Action方法的部分参数(针对HTTP GET)可以直接通过请求的URL解析出来
如图 所示 我们通过一个拦截器(Interceptor)对抵达Web服务器的HTTP请求进行拦截 一般的Web应用框架都提供了这样的拦截机制 对于ASP NET来说 我们可以通过HttpModule的形式来定义这么一个拦截器 拦截器根据请求解析出目标Controller的类型和对应的Action方法的名称 随后目标Controller被激活 相应的Action方法被执行
在激活Controller对象的目标Action方法被执行过程中 它可以调用Model获取相应的数据或者改变其状态 在Action方法执行的最后阶段会选择相应的View 整个View被最终转换成HTML 以HTTP响应的形式返回到客户端并呈现在浏览器中 绑定在View上的数据来源于Model或者基于显示要求进行的简单逻辑计算 我们有时候将它们称为VM(View Model) 即基于View的Model(这里的View Model与MVVM模式下的VM是完全不同的两个概念 后者不仅包括呈现在View中的数据 也包括数据操作行为)
返回目录 ASP NET MVC 框架揭秘
编辑推荐
Java程序性能优化 让你的Java程序更快 更稳定
lishixinzhi/Article/program/net/201311/16123