一次且僅一次

一次且僅一次(英語: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) (中文(臺灣)).