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. bzoj 1096: [ZJOI2007]仓库建设 斜率優化

    1096: [ZJOI2007]仓库建设 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2242  Solved: 925[Submit][Statu ...

  2. Junit4学习笔记

    一.初始化标注 在老Junit4提供了setUp()和tearDown(),在每个测试函数调用之前/后都会调用. @Before: Method annotated with @Before exec ...

  3. Keil_C51程序调试过程

    调试一般都是在发生错误与意外的情况下使用的.如果程序能正常执行,调试很多时候都是用不上的.所以,最高效率的程序开发还是程序员自己做好规范,而不是指望调试来解决问题. 单片机的程序调试分为两种,一种是使 ...

  4. leetcode面试准备:Multiply Strings

    1 题目 Given two numbers represented as strings, return multiplication of the numbers as a string. Not ...

  5. 利用row_number over 函数删除重复记录

    开窗函数                Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个组返回多行,而聚合函数对于每个组只返回一行 SQ ...

  6. mysql排序,可以对统计的数据进行排序

    sql SELECT a.*,b.name as address_name,b.tel as address_tel,b.province as address_province,b.city as ...

  7. BZOJ 1491 [NOI2007]社交网络

    1491: [NOI2007]社交网络 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1159  Solved: 660[Submit][Status] ...

  8. 常见sql的error解决方法

    1.sqlserver 2008 login failed: error 18456 这是很可能是因为你没有选择sql and windows登录的模式导致sql server的用户登录失败 解决方法 ...

  9. c语言 快速排序---归并排序----堆排序

    //快速排序: #include <stdio.h> #define MAX 500000 int s[MAX]; void Q_Sort(int start,int end) { int ...

  10. 《Linear Algebra and Its Applications》-chaper6-正交性和最小二乘法- 格拉姆-施密特方法

    构造R^n子空间W一组正交基的算法:格拉姆-施密特方法.