摘要: 原创出处 http://www.iocoder.cn/Architecture/how-to-read-source-code/ 「芋道源码」欢迎转载,保留摘要,谢谢!


0. 从零开始

一个喝了假酒的视频:

视频传送门
视频传送门
视频传送门

请关注笔者的公众号:芋道源码

  • 专注源码解析三十年!
  • 专注源码解析三十年!
  • 专注源码解析三十年!

1. 调试

通过 IDE 工具调试的方式阅读源码。

1.1 Elastic-Job

  • GitHub地址:https://github.com/dangdangdotcom/elastic-job
    • 开源不易,请点 Star 支持。
    • 个人 Fork,增加部分中文注释 GitHub地址:https://github.com/YunaiV/elastic-job
  • 为什么阅读 Elastic-Job 源码?:http://www.iocoder.cn/Elastic-Job/why-read-Elastic-Job-source-code/
  • 调试方式:com.dangdang.ddframe.job.example.JavaMain 直接 DEBUG 即可。

1.2 Sharding-JDBC

  • GitHub地址:https://github.com/dangdangdotcom/sharding-jdbc
    • 开源不易,请点 Star 支持。
    • 个人 Fork,增加部分中文注释 GitHub地址:https://github.com/YunaiV/sharding-jdbc
      • 基于 Sharding-JDBC V1.5.1 版本,建议阅读最新版本代码,我的可以作为注释补充。
  • 为什么阅读 Sharding-JDBC 源码?:http://www.iocoder.cn/Sharding-JDBC/why-read-Sharding-JDBC-source-code/
  • 调试方式:com.dangdang.ddframe.rdb.sharding.example.jdbc.Main 配置数据源后可以 DEBUG。
  • 拆解图:

1.3 MyCAT

  • GitHub地址:https://github.com/MyCATApache/Mycat-Server
    • 开源不易,请点 Star 支持。
    • 个人 Fork,增加部分中文注释 GitHub地址:https://github.com/YunaiV/Mycat-Server
  • 为什么阅读 MyCAT 源码?:http://www.iocoder.cn/MyCAT/why-read-MyCAT-source-code/
  • 调试方式:http://www.iocoder.cn/MyCAT/build-debugging-environment/

1.4 RocketMQ

  • GitHub地址:https://github.com/apache/incubator-rocketmq
    • 开源不易,请点 Star 支持。
    • 个人 Fork,增加部分中文注释 GitHub地址:https://github.com/YunaiV/incubator-rocketmq
  • 为什么阅读 RocketMQ 源码?:http://www.iocoder.cn/RocketMQ/why-read-RocketMQ-source-code/
  • 调试方式:有点想不起来了。以后补充哈。

1.5 补充

如果源码比较多,你不太清楚按照什么样的功能顺序调试下去,可以参考我写的博客。这个不是广告。确实有朋友是对照着博客顺序调试的。

2. UML图

推荐使用 Astah 社区版。对的,不要考虑破解不破解的。社区版,够!

另外,请不要纠结用什么 UML 工具牛逼!重点先迈出调试源码那一步,其他的,慢慢优化。

推荐画两种图:

  • 类图:对整体、或者某个模块,有系统性的认识。

  • 顺序图:对流程的调用顺序有整体的认识,避免调试,越调试越晕。

如果你不会画 UML 图,直接直接 Google,不要去找什么 UML 的书,先干起来!

恩,笔者不排除看 UML 书,因为,我也看过几本,收获不小,哈哈哈哈。


另外,Processon 也是一个不错的选择,在线 UML 工具,相比 Astash 来说,更加自由一些,例如下图 :

3. 输出

阅读源码,不尝试输出,就是在耍流氓。

推荐三种输出方式:

  1. 写博客。
  2. 团队分享。
  3. 造小轮。

刚开始推荐写博客。对的,不太建议只写自己看得懂的笔记。

知识星球

文章目录
  1. 1. 0. 从零开始
  2. 2. 1. 调试
    1. 2.1. 1.1 Elastic-Job
    2. 2.2. 1.2 Sharding-JDBC
    3. 2.3. 1.3 MyCAT
    4. 2.4. 1.4 RocketMQ
    5. 2.5. 1.5 补充
  3. 3. 2. UML图
  4. 4. 3. 输出