前言

鄙人有一毛病,喜欢钻研原理性的东西,感觉只知道怎么用还不太够,更想知道如何实现的以及为什么会这样。 
暑假的时候做积分系统是第一次接触MVC,感觉MVC就是一个框架,分为Module ,view和controller,浏览器传过来的信息先到达controller,controller处理逻辑调用module,返回合适的view,当时对框架特别模糊,现在稍微好点,但是还是不太清楚,有明白的欢迎评论。

MVC框架图


点击下载EA画的UML文件

简单解释

把http请求包装为HttpContext,用RouteTable.Routes.GetRouteData方法变为RouteData,然后把HttpContext和RouteData包装为RequestContext,routeData.RouteHandler.GetHttpHandler(requestContext)将RequestContext请求变为httphandler,HttpContext.RemapHandler方法为HttpHandler指定处理程序,MvcHandler调用ProcessRequest方法通过抽象工厂来创建具体的Controller,创建好的Controller调用Execute(RequestContext)方法,此方法又调用ControllerActionInvoker的InvokeAction方法来找到modelBinder类开始执行具体的方法,将执行的结果作为ActionResult返回给InvokeAction方法,ActionResult方法执行结果返回给界面,执行结束。

超精简解释

你发送的请求先进行路由匹配转为路由信息,然后http信息和路由信息一起作为请求信息交给路由处理器,路由处理器将请求信息转为http处理信息交给http处理器,http处理器讲http信息通过自己的抽象工厂造出一个Controller来,controller来执行请求信息,通过请求信息找到方法,执行方法,把执行的结果作为ActionResult,ActionResult再将Controller信息执行返回给界面。

参考

学习“迷你ASP.NET MVC框架”后的小结 
深入研究 蒋金楠(Artech)老师的 MiniMvc(迷你 MVC),看看 MVC 内部到底是如何运行的 
深入研究MiniMVC之后续篇

总结

越深入发现越有趣,各个方法之间的调用就能实现如此美妙的功能。 
欢迎各位小伙伴来一起探讨MVC的原理。

最新文章

  1. php实现文件上传与下载(中)
  2. MMORPG大型游戏设计与开发(服务器 游戏场景 掉落与网络连接)
  3. abort终止正在进行中的的ajax请求
  4. My second "last working day"
  5. WebsitePanel 2.1.0beta配置部分
  6. 设计模式之Builder模式
  7. Docker基础技术:AUFS
  8. Web内容禁止选中的两种方式
  9. ThreadSafeClientConnManager的20个例子
  10. 12.04 ubuntu 更改IP
  11. 从PRISM开始学WPF(二)Prism-更新至Prism7.1
  12. 《SQL优化入门》讲座总结
  13. C#调用Oracle的存储过程时,连接字符串需要配置PLSQLRSet=1
  14. js 音乐播放器
  15. [CQOI2015]任务查询系统(未完成)
  16. Android:防止过快点击造成多次事件 问题
  17. 访问url下载文件----python
  18. 关于generate用法的总结
  19. java-jdbc-mysql:实现数据库表的增删改查
  20. Codeforces Beta Round #3 C. Tic-tac-toe 模拟题

热门文章

  1. git-SSH连接配置
  2. Python collections系列之默认字典
  3. 第三篇 ubuntu下,mysql 的root用户密码忘了怎么办?
  4. python3小例子:scrapy+mysql
  5. 推荐几个MySQL大牛的博客
  6. mysql函数之五:group_concat mysql 把结果集中的一列数据用指定分隔符转换成一行
  7. 第十四届华中科技大学程序设计竞赛决赛同步赛 F Beautiful Land(01背包,背包体积超大时)
  8. CRC 简介
  9. ffmpeg一揽子
  10. Logstash-2.4.1的下载(图文详解)