raid重构原理
这篇文章介绍了重构真正的开源代码( Gradle Modules Plugin )时应用的五种(最著名的)重构原理。
语境
当我为Gradle Modules Plugin (PR #73 ) 单独编译 module-info.java
,我注意到了一些重构的潜力。 结果,我提交了问题#79 ,后来通过PR #88 (尚未合并)解决了该问题,在其中重构了代码。
事实证明,重构比我最初想象的要广泛得多。 在这里,我介绍此PR的一部分,作为我在那里应用的重构原理的示例。
重构原理
注意:这里列出的列表绝不是全面的,并且原则并不是原创的(不过,我以自己的声音并根据自己的理解提出了这些原则)。 正如我所看到的,这篇文章的最大价值在于遵循这些原则的真实示例。
这里介绍的五项原则是:
- 用“什么”隐藏“如何”
- 力求一致性
- 避免深层嵌套
- 单独的关注点(=单一责任原则)
- 明智地避免重复(=不要重复自己)
1.用“什么”隐藏“如何”
该原则只是由Robert Martin提出的“ 干净代码”原则的一部分。
对我来说,用“什么”隐藏“如何”意味着在任何时候提取类和方法 :
- 我可以识别出由某些代码执行的独特,非平凡的功能,并且
- 我可以用一个有意义的名称将这种不琐碎的事情隐藏起来。
示例1:
重构之前,这是RunTaskMutator
的一个片段:
mainDistribution.contents(copySpec -> copySpec.filesMatching(patchModuleExtension.getJars(), action -> {
RelativePath relativePath = action.getRelativePath().getParent().getParent()
.append( true , "patchlibs" , action.getName());
action.setRelativePath(relativePath); }));
这是重构后的代码段:
mainDistribution.contents(
copySpec -> copySpec.filesMatching(patchModuleExtension.getJars(), this ::updateRelativePath) );
综上所述,我们:
- 隐藏如何更新相对路径
- 与我们有什么 (=我们更新它的事实)。
由于有了这样的重构,掌握mainDistribution
发生的事情要容易mainDistribution
。
作为参考, 这里