如何高效阅读源代码?

下面是之前写的一篇文章:《如何快速阅读源码》
本文探讨在需要了解一个开源项目时,如何快速的理清开源项目的代码逻辑!
【如何高效阅读源代码?】以下是个人认为行之有效的方法:
先「跑起来」自顶向下拆解深入细节延伸改进本文以Mybatis为例来进行演示!
先“跑起来”程序界有个老传统,学习新技术时都是从「Hello World」开始的!无论是学习新语言时,打印「Hello World」;还是学习新框架时编写个demo!那为什么这里的「跑起来」要打个引号呢?
实际上,当你想要阅读一个开源项目的源码时,绝大部分情况下,你已经能够使用这个开源项目了!所以这里的“跑起来”就不是写个「Hello World」,也不是能跑起来的程序了!而是能__在你的脑子里「跑起来」__!什么意思?
Mybatis你会用了吧?那么请问Mybatis是如何执行的呢?仔细想想,你能否用完整的语句把它描述出来?
这里是Mybatis的官方入门文章!你是如何看这篇文章的?读一遍就行了吗?还是跟着文章跑一遍就够了吗?从这篇文章里你能获得多少信息?
我们来理一下:
安装如何在项目中引入Mybatis?Mybatis的groupId是什么?artifactId又是什么?目前最新版本是多少?从 XML 中构建 SqlSessionFactorySqlSessionFactoryBuilder可以通过xml或者Configuration来构建SqlSessionFactory,那是如何构建的呢?xml配置了哪些信息?既然使用了xml,那肯定有xml解析,用什么方式解析的?xml里的标签都是什么意思:configuration,environments,transactionManager,dataSource,mappers 。以及这些标签的属性分别是什么意思?SqlSessionFactory的作用是什么?不使用 XML 构建 SqlSessionFactoryBlogDataSourceFactory,DataSource,TransactionFactory,Environment,Configuration这些类的作用是什么?*Mapper的作用是什么?为什么提供基于XML和Java的两种配置方式?这两种配置方式的优缺点是什么?从 SqlSessionFactory 中获取 SqlSessionSqlSession的作用是什么?selectOne和getMapper的执行方式有什么区别?探究已映射的 SQL 语句*Mapper.xml的配置是什么?命名空间,id的作用是什么?*Mapper.xml是如何和*Mapper.java进行匹配的?匹配规则是什么?基于注解的映射配置如何使用?为什么提供基于XML和基于注解的两种映射配置?有什么优劣?作用域(Scope)和生命周期SqlSessionFactoryBuilder应该在哪个作用域使用?为什么?SqlSessionFactory应该在哪个作用域使用?为什么?SqlSession应该在哪个作用域使用?为什么?Mapper实例应该在哪个作用域使用?为什么?回答出了上面这些问题!你也就基本能在脑子里把Mybatis「跑起来」了!之后,你才能正真的开始阅读源码!
当你能把一个开源项目「跑起来」后,实际上你就有了对开源项目最初步的了解了!就像「书的索引」一样!基于这个索引,我们一步步的进行拆解,来细化出下一层的结构和流程,期间可能需要深入技术细节,考量实现,考虑是否有更好的实现方案!也就是说后面的三步并不是线性的,而是__不断交替执行__的一个过程!最终就形成一个完整的源码执行流程!
自顶向下拆解继续通过Mybatis来演示(限于篇幅,我只演示一个大概流程)!我们现在已经有了一个大概的流程了:
SqlSessionFactoryBuilder通过xml或者Configuration构建出SqlSessionFactory可以从SqlSessionFactory中获取SqlSessionSqlSession则是真正执行sql的类虽说每个点都可以往下细化,但是也分个轻重缓急!
我们是先了解怎么构建SqlSessionFactory呢?还是了解如何获取SqlSession呢?还是了解SqlSession如何执行sql的呢?很明显,SqlSession去执行 sql才是Mybatis的核心!我们先从这个点入手!


以上关于本文的内容,仅作参考!温馨提示:如遇专业性较强的问题(如:疾病、健康、理财等),还请咨询专业人士给予相关指导!

「辽宁龙网」www.liaoninglong.com小编还为您精选了以下内容,希望对您有所帮助: