最近在阅读源码,单体应用准备阅读spring、mybatis、tomcat,分布式可能会阅读netty、dubbo、zk、kafka、nacos等等。
阅读过程中我觉得最大的问题是,很容易陷入到复杂的代码逻辑里,而忘记了阅读的目的。
在我看来阅读源码总的来说有两方面的收获。
1、利于工作。对工作中使用的开源组件更加了解,便于日常解决问题,比如阅读错误堆栈、提供解决问题思路、功能扩展等等。
2、借鉴设计思路及模式。首先要知道开源组件核心要实现什么功能,实现此功能遇见的核心问题是什么,源码是通过什么方式解决的。然后借鉴这些做法。
明确了阅读的目的,那么我们就要有目的的去阅读,暂时忽略过多的细枝末节。我总结我的阅读方法。
1、了解开源组件的核心功能及扩展功能。这一步很关键。不要一上来就开始啃代码,还不会开车上来就看车辆图纸,连车辆的基本部件功能不了解,必然会使阅读举步维艰。另一方面,源码阅读虽然是看别人智慧的成果,但是自己也要参与思考,思考如果我去实现这些功能会通过什么方式,然后再对比源码的解决方式。复杂的源码其原理大部分都是相对简单且基本的,这个过程就是让你从宏观上明白源码的根本原理,知道的大体的原理及过程,无疑会对阅读源码减轻难度。不要迷信源码,一开始可能是源码的思路更好,但是当你阅读过足够多的源码,甚至自己造轮子之后,优化源码的设计及实现就是可以操作的事情了。毕竟源码也是在不断的发布版本优化的。
2、阅读主体流程,通过功能打断点阅读。先读懂怎么做的,再思考为什么这样做。这个过程反而没什么好说的,就是耐心加上思考。当然需要一些基本功,比如类加载、类初始化等。
3、总结具体解决某些功能的奇技淫巧,并想办法用一下试试。经常有人会调侃,某某组件的代码很接地气。当然调侃归调侃,实际上对一个组件的评价是有优先级的。第一条,最重要的是功能是不是强大,即便小而美,只要易于使用、性能强大、功能足够那么就是优秀的组件。第二条是可扩展性,即提供足够多的可扩展点,让使用变得更灵活,让使用者可以方便的实现个性化的需求。第三条才是源码是不是接地气,这其实看作者的性格,有的人喜欢云山雾罩,说话太直接他会觉得太粗鲁,有的人就喜欢直抒心意,觉得好阅读好维护才是好代码,在满足第一条和第二条前提下,这些都是次要的。
后面会陆续分享各组件的主流程和设计技巧。敬请期待。。。
网友评论