写框架思路进程(五)
来源:互联网 发布:大数据与企业战略 编辑:程序博客网 时间:2024/06/07 00:49
主线流程
主线流程,我们需要走一遍,让这个框架可以以一个HelloWorld形式跑起来,这需要把几个核心类的核心方法用最简单的方式进行实现。这里拿我们的MVC框架作为举例:
1、从startup开始,可能需要实现ServletContextListener来动态注册我们框架的入口Serlvet,暂且起名为DispatcherServlet,在这个类中我们需要走一些主线流程。
1.1 调用Routes.findRoute()获得IRoute
1.2 调用IRoute.getRouteResult来获得RouteResult
1.3 使用拿到的RouteResult作为参数调用DefaultControllerFacotry.createController()获得IController(其实也就是AbstractController)
1.4 调用IController.execute()
2、在config中创建一个IConfig作为一种配置方式,我们实现一个DefaultConfig,把各种默认实现注册到框架中去,也就是DefaultRoute、DefaultControllerFactory、DefaultActinInvoker,然后把各种IViewEngine加入ViewEngines
3、然后需要完成相关默认类的实现:
3.1 Routes.findRoute()
3.2 DefaultRoute.getRouteResult()
3.3 DefaultControllerFactory.createController()
3.4 AbstractController.execute()
3.5 DefaultActionInvoker.invokeAction()
3.6 ViewResult.execute()
3.7 ViewEngines.findViewEngine()
3.8 VelocityViewEngine.getViewEngineResult()
3.9 VelocityView.render()
在这一步,我们并不一定要去触碰filter和model这部分的内容,我们的主线流程只是解析路由,获得控制器,执行方法,找到视图然后渲染视图。过滤器和视图模型的绑定属于增强型的功能,属于支线流程,不属于主线流程。
实现各种支线流程
1. 实现更多的IRoute,并注册到Routes
2. 实现更多的IViewEngine,并注册到ViewEngines
3. 实现必要的IFilterProvider以及FilterProviders,把IFilterProvider注册到FilterProviders
4. 增强DefaultActionInvoker.invokeAction()方法,在合适的时候调用这些IFilter
5. 实现更多的IActionResult,并且为AbstractController实现更多的便捷方法来返回这些IActionResult
6. ……实现更多model模块的内容和plugin模块的内容
总结,实现一个框架的第一大步就是:
1. 设计一套合理的接口
2. 为框架进行模块划分
3. 为框架搭建由抽象结构构成的整体骨架
4. 在这个骨架基础上实现一个HelloWorld程序
5. 为这个骨架的其它部分填充更多实现
Routing 路由分析:
实现Web MVC基础可以概括为1个前段控制器和2个映射。
(1)前端控制器FrontController
ASP.NET和JSP都是以Page路径和URL一一对应,Web MVC要通过URL映射Controller和View,就需要一个前端控制器统一接收和解析请求,再根据的URL将请求分发到Controller。由于ASP.NET和Java分别以IHttpHandler和Servlet作为核心,因此ASP.NET MVC和Spring MVC分别使用实现了对应接口的MvcHandler和DispatcherServlet作为前段控制器。
ASP.NET中通过HttpModule的实现类处理URL映射,UrlRoutingModule根据URL将请求转发给前端控制器MvcHandler。
Spring MVC中,则根据URL的配置,直接将请求转发给前端控制器DispatcherServlet。
(2)URL和Contrller的映射
ASP.NET MVC将URL和Controller的映射规则存储在RouteCollection中,前端控制器MvcHandler通过IController接口查找控制器。
Spring MVC则通过RequestMapping和Controller注解标识映射规则,无需通过接口依赖实现控制器。
(3)URL和View的映射
ASP.NET MVC 默认通过RazorViewEngine来根据URL和视图名称查找视图,核心接口是IViewEngine。
Spring MVC 通过internalResourceViewResolver根据URL和视图名称查找视图,核心接口是ViewResolver。
- 写框架思路进程(五)
- 写框架思路进程(一)
- 写框架思路进程(二)
- 写框架思路进程(三)
- 写框架思路进程(四)
- 如何写一个RPC框架(五):服务器端实现
- android开发框架(五)AIDL进程间通信机制
- 如何写一个给自己的框架写一个优雅的Java Config模块(五)
- NYOJ228 士兵杀敌(五)(思路)
- java笔记:自己动手写javaEE框架(五)--Spring事务管理学习
- 一起写RPC框架(五)RPC网络模块的搭建三 序列化
- 一起写RPC框架(七)RPC网络模块的搭建五 Netty模块
- BFS 搜索 写代码思路(顺序)
- 框架(五)日志
- Struts2框架(五)
- EntityFramework6写的数据访问框架之五事务
- 自己动手写操作系统(五)
- Linux 进程学习(五)
- hdu1398Square Coins
- springMVC工作原理
- spring配置datasource三种方式 数据库连接池
- html
- 1613-3-傅溥衍 总结《2016年12月6日》【连续第六十七天总结】
- 写框架思路进程(五)
- 计算机系统漫游一
- C语言面试题
- windows系统AS使用genymotion超详情图文教程+下载链接
- LeetCode013:Roman to Integer
- 初识LeakCanary
- JNI 接口<二>
- 带波形进度的环形进度条实现
- Appium+robotframework环境搭建