1.自治视图

在早期(作者也没说明是多早,自己猜吧),我们倾向于将所有与UI相关的操作糅合在一起(现在我身边还有很多人这样做),这些操作包括UI界面的呈现、

用户交互操作的捕捉与响应(UI处理逻辑)、业务流程的执行及对数据的存取等,我们将这种设计模式称为自治视图(AV)。

自治视图在应用程序的重用性、稳定性和可测试性都存在各种各样的问题,所以我们采用关注点分离(SoC)的原则将可视化界面呈现、UI处理逻辑和业务逻辑

三者分离出来,并采用合理的方式降低三者之间的耦合度。

2.MVC模式

  • Model是对应用状态和业务功能的封装,Model接受Controller请求并完成业务处理,在应用状态改变的时候向View发出通知。
  • View提供给最终用户操作最终可视化界面。
  • Controller接受View的操作请求,调用Model处理数据,并对最终用户的操作进行响应。

MVC模式变体之MVP(之前在项目上用过了,这里再次感谢本书的作者,当时是拜读了作者的博客关于MVP的文章后才对MVP模式有深入的理解)。

MVC模式变体之Model 2

提出的目的:让MVC模式为web应用开发提供原生的支持,是一种源于Java的web应用结构模式。

Model2交互流程

ASP.NET MVC是根据Model 2模式设计的,通过一个自定义HttpModule(拦截器)对HTTP请求进行拦截解析,通过一个自定义HttpHandler来执行目标

Controller的激活和Action方法的执行。

3.IIS

在IIS7之前,ASP.NET 是以 IIS ISAPI extension 的方式外加到 IIS,其实包括 ASP 以及 PHP,也都以相同的方式配置(PHP 在 IIS 采用了两种配置方式,除了 IIS ISAPI extension 的方式,也包括了 CGI 的方式,系统管理者能选择 PHP 程序的执行方式),因此客户端对 IIS 的 HTTP 请求会先经由 IIS 处理,然后 IIS 根据要求的内容类型,如果是 HTML 静态网页就由 IIS 自行处理,如果不是,就根据要求的内容类型,分派给各自的 IIS ISAPI extension;如果要求的内容类型是 ASP.NET,就分派给负责处理 ASP.NET 的 IIS ISAPI extension,也就是 aspnet_isapi.dll。下图是这个架构的示意图。

而 IIS 7 完全整合 .NET 之后,架构的处理顺序有了很大的不同(如下图),最主要的原因就是 ASP.NET 从 IIS 插件(ISAPI extension)的角色,进入了 IIS 核心,而且也能以 ASP.NET 模块负责处理 IIS 7 的诸多类型要求。这些 ASP.NET 模块不只能处理 ASP.NET 网页程序,也能处理其他如 ASP 程序、PHP 程序或静态 HTML 网页,也因为 ASP.NET 的诸多功能已经成为 IIS 7 的一部份,因此 ASP 程序、PHP 程序或静态 HTML 网页等类型的要求,也能使用像是Forms认证(Forms Authentication)或输出缓存(Output Cache)等 ASP.NET 2.0 的功能(但须修改 IIS 7 的设定值)。也因为 IIS 7 允许自行以 ASP.NET API 开发并加入模块,因此 ASP.NET 网页开发人员将更容易扩充 IIS 7 和网站应用程序的功能,甚至能自行以 .NET 编写管理 IIS 7 的程序(例如以程控 IIS 7 以建置网站或虚拟目录)。

IIS7.0的处理请求的步骤

  1. 当客户端浏览器开始HTTP请求一个web服务器的资源时,HTTP.SYS拦截这个请求。
  2. HTTP.SYS经WWW服务器发送请求发送到WAS。
  3. WAS向配置存储中心请求配置信息(applicationHost.config)。
  4. WWW服务接收到配置信息,配置信息指类似应用程序池配置信息、站点配置信息等。
  5. WWW服务使用配置信息去配置HTTP.SYS处理策略。
  6. 根据请求WAS为Application Pool启动一个进程。
  7. 进程处理请求并返回结果给HTTP.SYS。
  8. 客户端接收到处理请求结果信息。

4.ASP.NET 管道

  • HTTP.SYS接收到请求后,如果是第一次访问该web应用,IIS会通过AppDomainFactory为该web应用创建一个应用程序域。随后一个特殊的运行时IsapiRuntime被加载,并接管该HTTP请求。
  • IsapiRuntime首先创建一个IsapiWorkerRequest对象来封装当前的HTTP请求,并将此对象传递给ASP.NET运行时HttpRuntime,至此HTTP请求正式进入ASP.NET管道。
  • HttpRuntime根据IsapiWorkerRequest对象创建HttpContext对象(HTTP请求上下文对象),之后HttpRuntime利用HttpApplicationFactory创建或获取HttpApplication对象(从HttpApplication对象池中获取),HttpApplication负责处理当前的HTTP请求。
  • 在HttpApplication初始化过程中,ASP.NET会根据配置文件加载并初始化注册的HttpModule对象。HttpModule作用是通过注册HttpApplication的相应事件,将所需的操作注入整个HTTP请求的处理流程。
  • 最终完成对HTTP请求的处理实现在HttpHandler中,不同的资源类型对应着不同类型的HttpHandler。

图:创建ASP.NET环境                                                                                 图:ASP.NET请求的内部对象模型                                        图:不同的HttpHandler处理请求

图:请求管道

以上笔记部分文字、图示摘自《ASP.NET MVC5 框架揭秘》,如有侵权之处请留言,本人将及时删除!

引用:

IIS 内部运行机制及Asp.Net执行过程详解

http://www.cnblogs.com/SALIN/archive/2012/08/13/2636511.html

.NET (C#) Internals: ASP.NET 应用程序与页面生命周期(意译)

http://www.cnblogs.com/SALIN/archive/2012/08/13/2636516.html

IIS 7.0 的 ASP.NET 应用程序生命周期概述

https://msdn.microsoft.com/zh-cn/library/bb470252(v=vs.100).aspx

ASP.NET MVC5框架揭秘 学习笔记01的更多相关文章

  1. Asp.net MVC5 框架揭秘 S412 实例解析 – 绝妙的扩展 模式的胜利

    Asp.net MVC5 框架是个 开源的,处处可扩展的框架. 蒋先生 在他的这本书里 对如何理解框架,如何扩展框架, 给出了大量的说明和实例. 先上效果图 大部分做传统BS 的同学看到这个页面,脑海 ...

  2. ASP.NET MVC5 及 EF6 学习笔记 - (目录整理)

    个人从传统的CS应用开发(WPF)开始转向BS架构应用开发: 先是采用了最容易上手也是最容易搞不清楚状况的WebForm方式入手:到后面就直接抛弃了服务器控件的开发方式,转而采用 普通页面+Ajax+ ...

  3. asp.net MVC4 框架揭秘 读书笔记系列3

    IIS/ASP.net管道 本节全部用图形表示便于理解和记忆 1.3.1 IIS5.x与asp.net 1.3.2 IIS 6.0与asp.net 1.3.3 IIS7.0与asp.net 基于IIS ...

  4. asp.net MVC4 框架揭秘 读书笔记系列2

    1.2 MVC 变体 MVC 是一种Pattern 另外一种说法是ParaDigm 范例 模式和范例的区别在于前者可以应用到具体的应用上,而后者则仅仅提供一些指导方针 1.2.1 MVP Model ...

  5. asp.net MVC4 框架揭秘 读书笔记系列1

    1.1 传统MVC 名词解释 Autonomous View. AV. 自制视图 GUI图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式 ...

  6. ASP.NET MVC Web API 学习笔记---第一个Web API程序

    http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html GetListAll /api/Contact GetListBySex ...

  7. ASP.NET Core Web开发学习笔记-1介绍篇

    ASP.NET Core Web开发学习笔记-1介绍篇 给大家说声报歉,从2012年个人情感破裂的那一天,本人的51CTO,CnBlogs,Csdn,QQ,Weboo就再也没有更新过.踏实的生活(曾辞 ...

  8. Mina框架的学习笔记——Android客户端的实现

    Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络 ...

  9. # go微服务框架kratos学习笔记六(kratos 服务发现 discovery)

    目录 go微服务框架kratos学习笔记六(kratos 服务发现 discovery) http api register 服务注册 fetch 获取实例 fetchs 批量获取实例 polls 批 ...

随机推荐

  1. MVC自学系列之三(MVC视图-Views)

    View的约定 1.根据约定,Views目录下包含着每一个与Controller同名但是没有像Controller后缀的文件夹:因此对于控制器HomeController就对应在views目录下有个目 ...

  2. 11.在Global的Application_Error处理错误示例

    Application_Error是在程序出问题时触发的事件. 这里面要用到错误页的情况,所以要配置web.config的customError项. 1.建立Global文件,在它的Applicati ...

  3. 《深度探索c++对象模型》chapter3 Data语意学

    一个空的class:如 class X{} ; sizeof(X)==1; sizeof为什么为1,他有一个隐晦的1 byte,那是被编译器安插进去的一个char,这使得class2的两个object ...

  4. buffer busy waits

    Buffer busy waits 当会话想要访问缓冲区中的数据块,而该数据块正在被其他会话使用时将产生Buffer busy waits事件. 其他会话可能正从数据文件向缓冲器读取同样的数据块,或正 ...

  5. 【HDOJ】3367 Pseudoforest

    并查集. #include <cstdio> #include <cstring> #include <cstdlib> #define MAXN 10005 #d ...

  6. 【HDOJ】1556 Color the ball

    简单线段树. #include <stdio.h> #define MAXN 100005 #define lson l, mid, rt<<1 #define rson mi ...

  7. 【转】微信Android SDK示例代码及运行方法

    原文网址:http://blog.csdn.net/icyfox_bupt/article/details/23742217 最近在研究微信SDK,无奈网上好使的教程太少,对于程序员来说最好的东西,一 ...

  8. (转载)如何优化MySQL insert性能

    (转载)http://blog.csdn.net/tigernorth/article/details/8094277 对于一些数据量较大的系统,面临的问题除了是查询效率低下,还有一个很重要的问题就是 ...

  9. 【转】LaTeX 符号命令大全

    函数.符号及特殊字符 声调 语法 效果 语法 效果 语法 效果 \bar{x} \acute{\eta} \check{\alpha} \grave{\eta} \breve{a} \ddot{y} ...

  10. Linux的IP设置参考

    位置:etc/network/interfaces 内容: 第一段是网口1自动从DHCP处获得IP 第二段是网口2静态分配IP 如果是IPv6,请把 iface eth0 inet dhcp(stat ...