一次且仅一次

一次且仅一次(英语:Once and only once,简称OAOO),又称为Don't repeat yourself(不要重复你自己,简称DRY),或一个规则,实现一次One rule, one place)是面向对象编程中的基本原则,程序员的行事准则。旨在软件开发中,减少重复的信息。

DRY的原则是“系统中的每一部分,都必须有一个单一的、明确的、权威的代表”,指的是(由人编写而非机器生成的)代码和测试所构成的系统,必须能够表达所应表达的内容,但是不能含有任何重复代码。当DRY原则被成功应用时,一个系统中任何单个元素的修改都不需要与其逻辑无关的其他元素发生改变。此外,与之逻辑上相关的其他元素的变化均为可预见的、均匀的,并如此保持同步。

起源

其起源已经不可考,一般认为这个原则最初由Andy HuntDave Thomas在他们的书The Pragmatic Programmer英语The Pragmatic Programmer[1]中提出。因为极限编程方法的创始者之一肯特·贝克总结和宣传而使其广为人知。

DRYWET

违反DRY原则的解决方案通常被称为WET,其有多种全称,包括“Write everything twice”(把每个东西写两次)、“We enjoy typing”(我们就是喜欢打字)或“Waste everyone's time”(浪费大家的时间)。

WET大致能分成4种:[2][3]

  1. Imposed duplication:开发者认为不得不的重复
  2. Inadvertent duplication:开发者没有意识到的重复
  3. Impatient duplication:开发者复制自己或他人的代码造成的重复
  4. Interdeveloper duplication:不同开发者间共同开发或交接造成的重复

有时,为了可读性,或避免耦合,或过早重构,应放弃DRY原则。[3]

参考文献

  1. ^ Hunt, Andrew; Thomas, David. The Pragmatic Programmer. Addison-Wesley Professional. 1999-10-30 [2021-09-26]. ISBN 978-0-201-61622-4. (原始内容存档于2021-09-26). 
  2. ^ Poudel, Prakash. Four Types of Duplication in Source Code. Prakash. 2015-10-01 [2021-09-26]. (原始内容存档于2021-09-26) (英语). 
  3. ^ 3.0 3.1 林奇璇, ShawnL. 程式設計心法 避免重複原則(DRY principle). 璇之又璇的网络世界. 2020-04-06 [2021-09-26]. (原始内容存档于2021-09-26) (中文(台湾)).