快速了解一个开源代码的用法

最近在做基于vertx的重构,两周时间,从仅仅知道vertx的存在,到弄懂基本原理,再到完成服务端的代码,包括提供rest接口,基于redis的session共享,整个过程学到很多。

会看代码才会写代码

纵观市面上的书籍,大的讲系统架构,中等的讲框架,再细化就是语法,更深的便是原理,基本看不到讲怎么读代码。以前我恨不能理解那些磕源码的人,因为大多数问题只要提供关键字,在google都能找到答案,根本用不到源码,但是要写出一款程序,不会看源码是万万完成不了任务的。

不会看源码的弊端一——版本太低

通过汇总搜索代码片段可能版本太低,达不到产品对软件优选级别,这个时候就必须改造代码,不兼容轻则接口参数不一样,重则包路径、类构造都彻底变更,比如vertx-redis-client的3.6.0和3.8.0就有存在不兼容,网上大部分的案例都是基于3.6.0的

不会看源码弊端二——不知道为什么要这么设计

网上搜索的参考代码可能包含了没有见过的注解语法或者工厂类,或者接口实现类,如果不了解源码,我们就可能面临不知道如何调整接口类,工厂类的问题。比如网上给出案例基本都是基于SharedDataSessionImpl,但是这个类并不适用只有读Session的场景,这个时候就需要我们设计一个类替换SharedDataSessionImpl,只从redis读session,没有任何的存储、删除、新增session的操作

不会看源码弊端三——无法深入理解框架原理

我在做基于redis的session共享方案时,参考给出的案例总是调用不到我实现的SessionStore类,最后实在没有办法,才去看SessionHandler的源码,才知道在必须要指定session的名字,并且这个名字从cookie中获取,因此要在SessionHandler前面先注册CookieHandler,然后指定session的名字,终于获取到了想要的session

我很少主动看源码,通常都是由问题驱动才看,并不是一名对源码深耕挖掘的人,所以只提供一些快速了解源码的方法

方法一——看官网示例

官网示例有专门的人更新,基本能保证是最新版本。且官网的示例简单,麻雀虽小五脏俱全,功能基本能在五十行内实现,非常有参考价值

方法二——Github源码的Readme.md

这里有每个版本对应的介绍和使用方法,绝对不会将不同版本弄混

方法三——接口的注释说明

要实现一个接口,它的注释说明会讲清楚它的依赖等各种初始化条件,或者参数适用的场景

方法四——打断点,看调用逻辑

有了前面三步,基本上能写出跑到断点的代码,这个时候打断点看看系统调用。静态调用层次无法显示动态加载,只有在运行的时候才知道完整的调用链

方法五——接口实现逻辑

这个也是花时间最长的。有了调用链,却还是得不到预想的结果,就必须回溯整个调用逻辑,必然是前面某个条件不满足,才没有走到正确的分支。

对于开源软件,要记住,接口比默认类实现更重要。比如在vertx中,核心概念的Vertx,Vertical,Router,Route,Handler都需要了解,跟着deploy的过程就可以基本了解加载过程。

你可能感兴趣的:(快速了解一个开源代码的用法)