Model
Trygve M H Reenskau当初提出的MVC是作为基于GUI的桌面应用的架构模式并不太适合Web本身的特性虽然MVC/MVP也可以直接用于ASPNET Web Forms应用但这是因为微软就是基于桌面应用的编程模式来设计基于Web Forms的ASPNET应用框架的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应用一样采用事件驱动的方式进行ASPNET Web Forms应用的编程而Model 采用完全不同的设计它让开发者直接面向Web让他们关注HTTP的请求和响应所以Model 提供对Web应用原生的支持
对于Web应用来说和用户直接交互的UI界面由浏览器来提供用户交互请求通过浏览器以HTTP请求的方式发送到Web服务器服务器对请求进行相应的处理并最终返回一个HTTP回复对请求予以响应接下来我们详细讨论作为MVC的三要素是如何相互协作最终完成对请求的响应的图所示的序列图体现了整个流程的全过程
图 Model 交互流程
Model 中一个HTTP请求的目标是Controller中的某个Action后者体现为定义在Controller类型中的某个方法所以对请求的处理最终体现在对目标Controller对象的激活和对相应Action方法的执行一般来说Controller的类型和Action方法的名称以及作为Action方法的部分参数(针对HTTPGET)可以直接通过请求的URL解析出来
如图所示我们通过一个拦截器(Interceptor)对抵达Web服务器的HTTP请求进行拦截一般的Web应用框架都提供了这样的拦截机制对于ASPNET来说我们可以通过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中的数据也包括数据操作行为)
返回目录ASPNET MVC 框架揭秘
编辑推荐
Java程序性能优化让你的Java程序更快更稳定
Visual C++音频/视频技术开发与实战