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. iOS程序开发引用的第三方库之间出现duplicate symbol时的处理方法

    iOS程序集成的第三方库过多时,很容易出现某几个库同时用到了一样的函数库,也就是在你的程序link时会提示duplicate symbol,而重复的符号又不是由你自己程序的代码造成的,也就说没法通过直 ...

  2. A simple Gaussian elimination problem.

    hdu4975:http://acm.hdu.edu.cn/showproblem.php?pid=4975 题意:给你一个n*m的矩阵,矩阵中的元素都是0--9,现在给你这个矩阵的每一行和每一列的和 ...

  3. DJANGO不同应用之间的用户迁移

    因为重新规划新的项目,数据库表结构和以前不一定了,但是想保存以前的很多用户认证方面的东东. 于是看了一下DJANGO的导入导出功能. ~~~~~~~~~~~~~~~~~~~ 数据导入: python ...

  4. VisualBox ubuntu14.04 64位 android4.4.4源码编译总结

    转载请保留出处:http://www.cnblogs.com/wi100sh/p/4337907.html 折腾了好几天,今天终于编译通过,用了4个多小时,太不容易了.如下图所示: 软件环境 虚拟机: ...

  5. Delphi安装/卸载OCX控件的方法

    delphi  安装卸载ocx 请参见 如下 http://blog.csdn.net/xt_chaoji/article/details/7027298 打开Delphi,关闭所有项目. 1.    ...

  6. 关于fixed-point

    今天又出现了shader的问题,编译到真机效果就没了,后来仔细还是因为浮点数精度的问题,后来仔细查找了些资料,才发现自己太粗心,没有看清楚 fixed-point 数据类型就乱用,这是个范围在 [-1 ...

  7. Hibernate(五)一对一单向关联映射

    上次的博文中 Hibernate从入门到精通(四)基本映射我们已经讲解了一下基本映射和相关概念,接下来 我们会讲稍微复杂点的映射——关系映射. 关系映射分类 关系映射即在基本映射的基础上处理 多个相关 ...

  8. Android学习笔记(七)两个Fragment简单跳转示例

    在前两篇博文中分别介绍了Fragment得基础和Fragment的生命周期,然而说了这么多Fragment到底怎么用呢以及我们为什么要使用Fragment?本篇博文将主要探讨这两个问题,首先说下在AP ...

  9. Android学习笔记(三)Application类简介

    每次运行APP时,Application类都保持实例化状态.与Activity不同,配置改变不会导致应用程序重启.通过继承Application类,可以完成一下3项工作: · 对Android运行时广 ...

  10. Front-End Engineer 技术栈

    自己根据各种招聘网站上的技术要求做的,希望自己能成为这样的人.