一般看源代码最难是难已下手,不知道如何是好。当然我们也可以先用后看,也就是通过官方提供的一个开放类,来调用方法进行一步步调试进入。但这种方法往往困难重重。阻碍因素过多。现谈谈我看源代码的方法。
1. 从顶层接口下手
一个开源框架的代码少则几十个类,多则上万个类,如何来看,层层套入的方法调用进行调试步入是极大的痛苦。但是如果我们从顶层接口下手,就方便多了。拿springioc源代码来说,顶层接口有价值就只有十几个。这样看来就简单多了,顶层接口没有任何实现,有何作用? 一般顶层接口很明显的表述了这个接口用来干什么,将会为你做什么事情,能提供什么样的帮助,会有哪些动作。 一个接口包含一部分动作,当全部接口是不是包含一套的动作了。 从而我们可以猜想出,哪个动作和哪个动作有关系,依赖于哪个动作。把顶层接口理解透后,再源代码,再碰到抽象的代码,一看就知道这个地方做了什么事件,至于怎么做,看你愿不愿意去理解,毕竟看源代码看思想,而不是看实现。
2. 类结构图
类结构图是看源代码最容易理解的直观方式。uml图怎么看?那你得去学习uml了。类结构图直接体现了这个框架的结构,架构。从中我们可以完全可以想像出的真面目。如何下手看,从最底层开始。从你使用的那个类开始看,如spring来说,我们要应用需要创建一个ClasspathXmlApplicationContext这个类,这就是最底层的一个类,利用eclipse工具,或者通过查看api 就能直观的看到这个类的继承结构。然后使用类图将这些类结构表述出来。顺便描述一下,在类的层次结构中,每个类做了哪些事件。
3. 从方法出发
现在可以找到程序的入口了,既然主线类结构图我们都知道,我们需要从主线的入口,一个一个的打开口了。当然这里如果对于有结构性的代码,接口和抽象,以及各种模式应用的很多,如果这些不懂,那就先写先代码吧。在看代码过程中,碰到引用的新类,一定要先找到这个类的顶层接口,从第一步中去找这个接口用来干嘛的,知道他是做什么的,自然要了解就容易了,从api出发,看这个类的结构。具体有哪些实现,都有哪些功能。在看的过程中,刻用uml或者用纸将这些类结构添加到第二步的主类结构中去。这样慢慢下来就形成的一张非常有用的整体类结构图。
4. 从思想上看全局
思想尤为重要,从整个类结构图中找到使用过哪些设计模式,在模糊的地方再去详细查看源代码,相信走到这一步你应很快的就能找到你要找的东西,好好端详一下。
5. 设计模式的复用
一般经典的代码一个类和一个方法做的事情并不多,都会抽象到底层实现,而不同的实现又有不同的类,你现在就可在里面添加你自己实现,一般这种情况下,你只需要加多一个工厂类而已,就能够实现,或者直接修改源代码,没有事,烂了再覆盖一次就行。
6. 调试运行
为什么最后才调试运行呢,过早的调试运行只会让你陷入泥潭,当你知道结构后你知道你需要什么东西时,调试运行才会给你更多的东西,知道哪些东西为什么多传给了你,传给你有什么用,你需要的为什么没有给你。调试运行在找错误时第一个想到用他没有问题,看源代码时,我觉得最后才是体现其用处的时候。
如:
拿spring来说,你要看代码,ioc,aop,web,orm,这里面都是一个结构,ioc里面就包含很多的模块,当你知道整个结构时,你需要明确的定义,我现在就看控制反转结构,或者xml解析等,当目标明确,能快速地从结构图中看到在哪里个地方,有哪些实现,这样也就方便多了。
1. 从顶层接口下手
一个开源框架的代码少则几十个类,多则上万个类,如何来看,层层套入的方法调用进行调试步入是极大的痛苦。但是如果我们从顶层接口下手,就方便多了。拿springioc源代码来说,顶层接口有价值就只有十几个。这样看来就简单多了,顶层接口没有任何实现,有何作用? 一般顶层接口很明显的表述了这个接口用来干什么,将会为你做什么事情,能提供什么样的帮助,会有哪些动作。 一个接口包含一部分动作,当全部接口是不是包含一套的动作了。 从而我们可以猜想出,哪个动作和哪个动作有关系,依赖于哪个动作。把顶层接口理解透后,再源代码,再碰到抽象的代码,一看就知道这个地方做了什么事件,至于怎么做,看你愿不愿意去理解,毕竟看源代码看思想,而不是看实现。
2. 类结构图
类结构图是看源代码最容易理解的直观方式。uml图怎么看?那你得去学习uml了。类结构图直接体现了这个框架的结构,架构。从中我们可以完全可以想像出的真面目。如何下手看,从最底层开始。从你使用的那个类开始看,如spring来说,我们要应用需要创建一个ClasspathXmlApplicationContext这个类,这就是最底层的一个类,利用eclipse工具,或者通过查看api 就能直观的看到这个类的继承结构。然后使用类图将这些类结构表述出来。顺便描述一下,在类的层次结构中,每个类做了哪些事件。
3. 从方法出发
现在可以找到程序的入口了,既然主线类结构图我们都知道,我们需要从主线的入口,一个一个的打开口了。当然这里如果对于有结构性的代码,接口和抽象,以及各种模式应用的很多,如果这些不懂,那就先写先代码吧。在看代码过程中,碰到引用的新类,一定要先找到这个类的顶层接口,从第一步中去找这个接口用来干嘛的,知道他是做什么的,自然要了解就容易了,从api出发,看这个类的结构。具体有哪些实现,都有哪些功能。在看的过程中,刻用uml或者用纸将这些类结构添加到第二步的主类结构中去。这样慢慢下来就形成的一张非常有用的整体类结构图。
4. 从思想上看全局
思想尤为重要,从整个类结构图中找到使用过哪些设计模式,在模糊的地方再去详细查看源代码,相信走到这一步你应很快的就能找到你要找的东西,好好端详一下。
5. 设计模式的复用
一般经典的代码一个类和一个方法做的事情并不多,都会抽象到底层实现,而不同的实现又有不同的类,你现在就可在里面添加你自己实现,一般这种情况下,你只需要加多一个工厂类而已,就能够实现,或者直接修改源代码,没有事,烂了再覆盖一次就行。
6. 调试运行
为什么最后才调试运行呢,过早的调试运行只会让你陷入泥潭,当你知道结构后你知道你需要什么东西时,调试运行才会给你更多的东西,知道哪些东西为什么多传给了你,传给你有什么用,你需要的为什么没有给你。调试运行在找错误时第一个想到用他没有问题,看源代码时,我觉得最后才是体现其用处的时候。
如:
拿spring来说,你要看代码,ioc,aop,web,orm,这里面都是一个结构,ioc里面就包含很多的模块,当你知道整个结构时,你需要明确的定义,我现在就看控制反转结构,或者xml解析等,当目标明确,能快速地从结构图中看到在哪里个地方,有哪些实现,这样也就方便多了。