程序员修炼之道系列 | 代码中邪恶的重复是怎样发生的?

2021-04-06 15:40:17
LuLu
原创
2898
摘要:很多人将 Don’t repeat yourself 限定为“不要写重复的代码”,但它更强调的是对知识和意图的重复。

一、什么是DRY?

Don’t repeat yourself,简称DRY,是软件工程中广泛且被普遍接受的最佳实践。DRY原则上是要求系统中的每一部分,都必须单一、明确、权威地表达。其实就是可靠地开发软件、并让开发项目更易于理解和维护。DRY原则中最基本的就是不要重复代码。

在软件工程中,“干净的代码”是一种理想的追求。能够辨别重复,并通过适当的实践消除重复的程序员,比一直在重复代码的程序员,写的代码会更清洁。

很多人将DRY限定为“不要写重复的代码”,但它更强调的是对知识和意图的重复。

二、重复是怎样发生的?

编程过程中,我们所见到的大多数重复问题,大致可以分为以下四类:

1、强加的重复

大多数人都在无力避免重复的情形下工作过,

比如有的项目可能会使我们重复共有的定义和过程,或有的编程语言自身要求某些重复信息的结构。

比如文档规范中经常强调的注释,但事实上无用的注释会使代码变得糟糕。如果运用DRY的法则,就是把浅显易懂的知识放在代码中,把注释保留给其他高级的说明。否则,就是在重复知识。

2、无意的重复

来自代码设计中的错误,通常会让开发者意识不到他们在重复信息。

3、无耐性的重复

这种重复通常是由于开发者偷懒,认为重复会让功能的实现变得更容易。也会因项目时间的限制,而驱使一部分开发者拷贝、修改原来的代码,走捷径。

欲速则不达,重复也许可以节省几秒钟,但一旦出现了问题,反而会花费更多的时间去修复。

4、开发者之间的重复

最典型的就是下面这个例子。美国的一个州,在对政府电脑系统进行千年虫问题检查时,审计发现有超过一万个程序,每个程序都包含不同版本的社保号验证代码。 

同一个团队中不同开发者的重复,可能是最难检测和处理的。这些重复可能存在好多年,都不容易被发现,会导致各种维护问题。

三、初步实现DRY,可以尝试这样做

1、停止重复不必要的代码;

2、当代码重复 3 次时,停止并思考是否需要进一步抽象代码或工具类;

3、对历史遗留代码增加测试程序,梳理逻辑,增加说明文档并通知相关人员;

4、适时讲解项目,明确项目目前已有的功能和代码,减少因不了解项目而造成的重复。 

写好一段代码需要时间,但写一段好代码需要更长时间。把优秀的软件设计原则变成习惯,会节省很多开发时间,更利于维护和扩展软件项目。Don’t repeat yourself,你还有其他更好的方法吗?欢迎评论区留言~