DRY原则:识别模式并抽象概括 - javierdearcos


DRY 来自“Don't Repeat Yourself”的首字母缩写词,是最普遍的开发原则之一。它是由Andy Hunt和Dave Thomas在他们的书The Pragmatic Programmer中创造的。
DRY不是简单的“不要重复自己!”,它的关键是识别一种模式并用理想的抽象级别对其进行概括。
DRY 源于复制知识的危险,这意味着在发生变化时,我们必须记住复制该知识的所有位置上下文,否则我们将陷入系统中的不一致。完整的原理是:
 
每一条知识都必须在系统中具有单一、准确和完整的表示。

如果我们坚持完整的原则,我们将对 DRY 代表什么有更清晰的了解,但如果我们只坚持首字母缩略词,我们将错过许多细微差别,这会使我们过于简单化它的含义。
 
在某些情况下,我们会以随意的方式发现相同的代码,但很明显它会以不同的方式发展。这里提取公共代码是错误的。或者代码看起来属于不同的情况,因为它的命名和结构方式不同,但隐藏了相同的模式。在这种情况下,我们将不得不对其进行抽象。
DRY 的关键是识别一种模式并用理想的抽象级别对其进行概括,以便它对我们所有的情况都有用。
重要的是要意识到过早抽象的危险,并且复制代码通常比创建错误的抽象更可取。
每次提取公共代码时,您都会在系统的不同部分和/或不同计算机之间创建依赖关系。因此,有必要分析这种依赖是否有意义,以及它可能带来的问题是否值得。
也有可能在提取此公共代码时,您必须以 API 的形式将其公开,以便不同的模块和/或团队可以使用它。在这里,您将被绑定到维护 API 的契约,以免破坏可能使用它的其他团队或客户的代码,因此您必须非常确信它是正确的抽象。
由于这些原因和代码之外的其他原因,不重复代码可能并不总是一个好主意。

​​​​​​​