MVC源码学习:打造自己的MVC框架

时间:2021-09-12 12:21:04
【文件属性】:

文件名称:MVC源码学习:打造自己的MVC框架

文件大小:1.67MB

文件格式:PDF

更新时间:2021-09-12 12:21:04

MVC源码学习

目录 MVC系列——MVC源码学习:打造自己的MVC框架(一:核心原理) ............................................................................... 3 一、MVC原理解析 ................................................................................................................................................................... 4 1、MVC原理 ..................................................................................................................................................................... 4 二、HttpHandler ................................................................................................................................................................... 6 1、HttpHandler、IHttpHandler、MvcHandler的说明 ........................................................................................ 6 2、IHttpHandler解析 .................................................................................................................................................. 6 2.1、Asp.net管线事件简易说明 ........................................................................................................................ 6 2.2、Asp.net中常见的HttpHandler类型 ...................................................................................................... 7 2.3、自定义HttpHandler。 ............................................................................................................................. 10 3、MvcHandler解析 .................................................................................................................................................... 11 三、HttpModule ................................................................................................................................................................... 13 1、HttpModule能干什么 ............................................................................................................................................ 13 2、HttpModule的使用 ................................................................................................................................................ 14 3、HttpModule和HttpHandler如何区分 .............................................................................................................. 18 4、UrlRoutingModule解析 ....................................................................................................................................... 18 四、总结 ................................................................................................................................................................................. 22 MVC系列——MVC源码学习:打造自己的MVC框架(二:附源码) ................................................................................. 23 一、版本一:搭建环境,实现MVC请求 ............................................................................................................................. 24 1、新建一个类库项目,我们暂且命名为Swift.MVC. ............................................................................................ 25 2、新建MvcHandler和UrlRoutingModule ........................................................................................................... 25 3、新建一个空的Web项目测试Swift.MVC .............................................................................................................. 26 二、版本二:完善MvcHandler和UrlRoutingModule ................................................................................................. 28 1、UrlRoutingModule的完善 ................................................................................................................................... 28 2、MvcHandler部分的完善 ........................................................................................................................................ 31 2.1、关于控制器工厂 ........................................................................................................................................... 32 2.2、控制器的父类实现 ....................................................................................................................................... 37 3、测试及代码释疑 ....................................................................................................................................................... 38 4、向Swift.MVC里面加入Model ............................................................................................................................. 47 三、版本三:加入自己的路由模块 ..................................................................................................................................... 49 四、总结 ................................................................................................................................................................................. 49 MVC系列——MVC源码学习:打造自己的MVC框架(三:自定义路由规则) ................................................................. 50 一、版本三功能介绍 ............................................................................................................................................................. 51 二、UrlRoutingModule的实现 ......................................................................................................................................... 52 1、SwiftRouteTable.cs代码 .................................................................................................................................. 53 2、SwiftRouteCollection.cs代码........................................................................................................................ 53 3、SwiftRoute.cs代码 ............................................................................................................................................. 55 4、SwiftRouteData.cs代码 ..................................................................................................................................... 56 5、IRouteHandler.cs代码 ....................................................................................................................................... 56 6、UrlRoutingModule.cs代码 ................................................................................................................................ 57 三、MvcHandler的实现 ...................................................................................................................................................... 59 1、MvcHandler.cs ...................................................................................................................................................... 59 2、Controller.cs ...................................................................................................................................................... 61 四、测试以及代码释疑 ......................................................................................................................................................... 62 1、启动项目,首先进到全局配置文件的Application_Start()方法 ......................................................... 63 2、然后请求进到UrlRoutingModule里面,取SwiftRouteCollection的值: .................................... 64 3、然后请求进到SwiftRouteCollection类的GetRouteData()方法里面。这个方法的作用很明显,就是解析当前的请求的url,从中获取当前的controller、action、参数等信息。这个方法执行完之后得到的SwiftRouteData对象,结果如下: ......................................................................................................... 65 这个对象包含两个属性,RouteHandler和当前请求的路由表。 .................................................................. 66 4、通过步骤3知道,当前的swiftRouteData对象包含了RouteHandler对象, IRouteHandler routeHandler = routeData.RouteHandler; 结果如下: ........................................................................ 66 5、得到RouteHandler对象之后,就是从该对象的GetHttpHandler()方法里面得到当前的HttpHandler。 ................................................................................................................................................................................. 67 这个应该不难理解,将routeData和context传入MvcHandler里面。这就是为什么之前MvcHandler里面有一个两个参数的构造函数的原因。 ......................................................................................................... 68 6、然后就是执行 context.RemapHandler(httpHandler); 将请求正式交给MvcHandler。 .............. 68 7、在MvcHandler的ProcessRequest方法里面,首先从当前请求的路由表里面去控制器名称,如下图,得到”Home“: ........................................................................................................................................................ 68 8、然后就是创建控制器工厂、从工厂里面得到当前请求的控制器的对象,这部分和之前变化不大。 .... 69 9、得到控制器对象之后,执行对应的当前请求的action方法,请求尽到Controller这个父类的Execute()方法里面 ............................................................................................................................................. 69 10、通过反射,最终执行BootstrapTest()方法。 ....................................................................................... 70 11、BootstrapTest()方法执行完成之后,释放当前的控制器对象: factory.ReleaseController(controller); 。请求结束。 .......................................................... 70 五、支持方法的重载 ............................................................................................................................................................. 70 六、总结 ................................................................................................................................................................................. 71 MVC系列——MVC源码学习:打造自己的MVC框架(四:了解神奇的视图引擎) ......................................................... 72 一、自定义ActionResult .................................................................................................................................................. 73 二、ContentResult和JsonResult的实现 .................................................................................................................... 74 三、解析视图引擎原理 ......................................................................................................................................................... 79 1、视图引擎原理解析 ................................................................................................................................................... 79 2、自定义视图引擎 ....................................................................................................................................................... 80 2.1、首先定义一个ViewResult去实现ActionResult ................................................................................ 80 2.2、在Controller.cs里面定义“快捷方法” ................................................................................................ 80 2.3、添加视图ViewIndex .................................................................................................................................. 81 四、RazorEngine实现视图引擎 ........................................................................................................................................ 82 1、基础用法 ................................................................................................................................................................... 82 2、作为视图引擎的实现 ............................................................................................................................................... 86 2.1、先定义一个ActionResult的实现类。由于缓存的key必须唯一,这里使用filepath作为缓存的Key,第一次加载缓存,之后访问该页面就很快了。 ....................................................................................... 86 2.2、在Controller.cs里面定义“快捷方法” ................................................................................................ 86 2.3、在具体的控制器里面调用 ........................................................................................................................... 87 2.4、对应的View页面。我们还是用html代替,当然如果你想要用cshtml的文件,只需要改下上述文件路径即可。 ......................................................................................................................................................... 87 五、NVelocity实现视图引擎 ............................................................................................................................................ 88 1、定义ActionResult的实现类VelocityViewResult ...................................................................................... 91 2、在Controller.cs里面添加“快捷方法” ............................................................................................................ 92 3、在具体的控制器里面调用 ....................................................................................................................................... 92 4、新建对应的视图 ....................................................................................................................................................... 92 六、VTemplate实现视图引擎 ............................................................................................................................................ 93 七、总结 ................................................................................................................................................................................. 93


网友评论