如何阅读源码

  首先,要站在超越阅读源码的角度才能够读懂源码;

  然后,要明白读源码的几个阶段,首先是要使用明白,在应用层面搞懂这个源码是做什么用的,要能够run起来;

  接着是调试阶段,最好是能够Debug,这一点是从《阅读struts源码》中找到灵感,否则因为if分支或者其他原因,很可能陷入误解之中;

  在阅读的过程中始终把握两点: 一个是生命周期,一个是职责,一个是关系,生命周期首先是大的生命周期,都有哪些核心对象,交互流程怎样,每个阶段都做什么事情;然后是每个类的生命周期,以及职责,职责就是这个类到底是做什么的,比如FDT里面的ControlChannel就是做FDTReaderSession的控制指令传输通道以及对端控制指令的接收器,附带创建之初交换本端的配置信息,如此一来,这个类算是读懂了;最后一个是关系,两个层面,都是核心类都和那些类交互,比例怎么样1:1,还是1:*;

  这里强调一点:就是生命周期可能是多个流程,比如在struts里面init是一套流程(生命周期),处理http请求是另外一套;你看到多套流程之后才能够形成清晰而全面的代码业务流

  阅读源码第一轮要学会跳着看,源码第一轮要掌握核心类流程以及设计思想,细节地方可以跳过;但是该搞明白的一定要搞明白;跳着看就是把细节,不影响掌握大局的部分先跳过去不管;所谓抓大放小。

  读源码要有目的性,这样能否帮助你在海量代码中能够关注重点,比如老杜在看fdt就识别出流控,而我却没有是别出来,因为我的目标是抓面看,这样浪费时间而且还容易淹没在海量信息中。

  另外,如果是多线程的工程,对于代码的理解很多时候要站在多线程的角度来看,有的时候想到了多线程机制,可能就会整个流程就通了。比如在FDT中,如果你想到SocktWriteTask是多线程创建,和对端的SocketReaderTask多线程对接,真个流程就通了,为什么会对此发送1的控制指令到对端就可以理解了。

  

  

  

  

  

  

  

  

  

  

  

原文地址:https://www.cnblogs.com/xiashiwendao/p/6606824.html