-
从开发写代码的角度,怎么可以写出大师级别的代码,高扩展的同时又兼具可读性(这是一个相对角度,但是Spring在两方面都做到了很好的兼容)
-
先从方法的设计上:
-
规则一:方法一般都会比较简短,从一个方法的逻辑上会切分出很多的小逻辑,每个小逻辑都会抽象出方法(Spring中大部分都是采取的这种方式)
-
规则二:针对传参数在比较难以表达的时候会抽象出一定的概念进行数据结构的封装。这样从方法传惨的维度使这个方法更加易于理解和可读。按照规则一对大方法的逻辑进行抽取小方法的时候会伴随着更多参数的传递,这个规则也是为了防止可读性变差的一个策略。Spring中每个方法和传递的参数都非常明确,虽然很复杂但是按照一定的语意规则读起来还是比较容易的。你可以从Spring源码中随便拎出来一个方法都是可以很好的表达其语意,针对一些多参数不太好表达的方法会抽象出对应的概念封装数据结构,使得方法读起来比较可读,对于一些比较难以表达的传参往往会通过构造一定的概念使其更加简洁和更加容易理解(Context,BeanDefinition,PostProcessor,Aware等等概念)
-
规则三:就是大家都熟知的语义化的命名方式,无论是从方法的命名还是穿惨的命名
-
规则四:注释详细
-
-
类的层次:
-
规则一:在设计类的时候一定要有一个领域的大概念,还有领域内的一些小的概念,类的设计和划分往往就是根据各种领域概念进行划分的。BeanDefnition(大的领域概念)PropertyValues(小概念) ConstructorArgumentValues(小概念),还有一些辅助性的概念 BeanDefinitionReader等等
-
规则二:针对一个大的领域往往通过抽象接口和不同的实现类或着抽象类进行层次性的设计和划分,BeanFactory根据一些功能(可配置功能、可获取实例集合功能、注解功能)抽象出一系列的BeanFactory(HierarchicalBeanFactory、AutowireCapableBeanFactory、ListableBeanFactory) 在通过继承或者组合的方法衍生更多其他功能的概念或者实现类。
-
-
读代码的维度上:
- 通过了解API的设计了解其大概的设计或者逻辑
- Spring在可读性的提升上,主要在其优良的API设计上体现。(所以在开发的时候API的设计至关重要)
- 在读一些开源的源码的时候,更多的时间应该放在研究API的设计上,读懂API就可以大致了解其设计的一个思想和架构。
- 所以读源码就读API,除非一些有巧妙设计或者性能考量和优化的设计需要读取具体的实现