Model2
Trygve M.H.Reenskau当初提出的MVC是作为桌面应用的架构模式。
Web应用和桌面应用的主要区别在于用户是通过浏览器与应用进行交互,交互请求和响应是通过Http请求和响应来完成的。
为了让MVC能够为Web应用提供原生的支持,Model2这种MVC变体被提出来。
对于Web应用来说,和用户直接交互的UI界面界面由浏览器来呈现,用户交互请求通过浏览器以HTTP请求的方式发送给Web服务器,服务器对请求进行相应的处理并最终返回一个HTTP回复对请求予以响应。
Model2中一个HTTP请求的目标是Controller中的某个Action,具体体现为定义在Controller类型中的某个方法,所以对请求的处理最终体现在对目标Controller对象的激活和对目标Action方法的执行。一般来说,Controller的类型和Action方法的名称及作为Action方法的部分参数可以直接通过请求的URL解析出来。
我们通过一个拦截器(Interceptor)对抵达Web服务器的HTTP请求进行拦截。对于ASP.NET来说我们可以通过HttpModule的形式来定义这么一个拦截器。这个拦截器根据根据当前请求解析出目标Controller的类型和对应的Action方法的名称,随后目标Controller被激活,相应的Action方法被执行。
目标Action方法被执行过程中,他可以调用Model获取相应的数据或者改变其状态。在Action方法执行的最后阶段一般会创建一个View,后者最终被转换成HTML以HTTP响应的形式返回到客户端并呈现在浏览器中。绑定在View上的数据来源于Model或者基于显示要求进行的简单逻辑计算,我们称它为VM,即View的Model。