WhatAKitty Daily

A Programmer's Daily Record

如何系统性的学习分析一个开源框架

WhatAKitty   阅读次数loading...

背景

这几年工作学习下来,对于开源框架分析学习没有一个完善的方法论可供参考,结合自身的学习经验,在这里略微发表下笔者的思路。

指导思想

  1. 首先需要了解这个开源框架的框架性功能(如果文档没有,则通过这个框架的具体功能来提取要素,找到框架性功能)
  2. 分析不同框架性功能在这个框架内的作用(核心功能、支撑功能)
  3. 对于核心功能具体分析,对于支撑功能有兴趣再了解
  4. 核心功能分析,按照上述2、3的逻辑再做具体功能的拆分,基本上拆出这两层已经差不多
  5. 画出核心功能的依赖处理流程图
  6. 查看每个功能的核心类,搞清楚不同功能的核心类的交互机制以及如何构建出这个框架的核心能力,输出核心流程图(时序图也可)
  7. 从核心类出发,查看其它支撑类的作用,并构建类图
  8. 从底往上出发,查看框架应用的设计模式以及为何需要使用这个设计模式,对于扩展性、易用性、可读性等的影响在哪里
  9. 总结性文档输出
sequenceDiagram
    alt /favicon.ico
        RestController->>RestController: 返回favicon.ico资源
    else
        rect rgb(0, 0, 255, .1)
            note over RestController: tryAllHandlers
            RestController->>RestController: 获取该请求path匹配的所有MethodHandler
      loop 循环所有的MethodHandler
        RestController->>RestController: 根据method获取对应的RestHandler
        rect rgb(0, 255, 0)
          note over RestController: 分发Request请求
          alt 不支持的请求
            RestController->>RestController: 返回badRequest
          else restHandler匹配存在
            alt 是否为限流请求
              RestController->>RestController: 设置限流
            else
              RestController->>RestController: 取消限流
            end
            RestController->>BaseRestController: 处理请求
            BaseRestController->>BaseRestController: 请求预处理
            note over BaseRestController: 每个具体的请求做具体的预处理动作

          else 
            RestController->>RestController: 
          end
        end
        RestController->>RestController: 标记分发结果flag为true/false
        alt flag为true
          RestController->>RestController: break循环
        end
      end
      alt flat为false
        RestController->>RestController: 返回400
      end
        end
    end