一次且仅一次(英語:Once and only once,简称OAOO),又稱為Don't repeat yourself(不要重复你自己,简称DRY),或一个规则,实现一次(One rule, one place)是面向对象编程中的基本原则,程序员的行事准则。旨在软件开发中,减少重复的信息。
DRY的原则是“系统中的每一部分,都必须有一个单一的、明确的、权威的代表”,指的是(由人编写而非机器生成的)代码和测试所构成的系统,必须能够表达所应表达的内容,但是不能含有任何重复代码。当DRY原则被成功應用時,一个系统中任何单个元素的修改都不需要與其逻辑无关的其他元素發生改變。此外,與之逻辑上相关的其他元素的變化均爲可预见的、均匀的,並如此保持同步。
起源
其起源已经不可考,一般认为这个原则最初由Andy Hunt和Dave Thomas在他们的书The Pragmatic Programmer[1]中提出。因为极限编程方法的创始者之一肯特·贝克总结和宣传而使其广为人知。
DRY與WET
违反DRY原則的解決方案通常被称为WET,其有多种全称,包括“Write everything twice”(把每個東西寫兩次)、“We enjoy typing”(我们就是喜欢打字)或“Waste everyone's time”(浪费大家的时间)。
WET大致能分成4種:[2][3]
- Imposed duplication:開發者認為不得不的重複
- Inadvertent duplication:開發者沒有意識到的重複
- Impatient duplication:開發者複製自己或他人的程式碼造成的重複
- Interdeveloper duplication:不同開發者間共同開發或交接造成的重複
有時,為了可讀性,或避免耦合,或過早重構,應放棄DRY原則。[3]
参考文献