HOME

TheInfoList



OR:

"Don't repeat yourself" (DRY) is a
principle A principle is a proposition or value that is a guide for behavior or evaluation. In law, it is a rule that has to be or usually is to be followed. It can be desirably followed, or it can be an inevitable consequence of something, such as the l ...
of
software development Software development is the process of conceiving, specifying, designing, programming, documenting, testing, and bug fixing involved in creating and maintaining applications, frameworks, or other software components. Software development invo ...
aimed at reducing repetition of software patterns, replacing it with abstractions or using
data normalization In mathematics and computer science, a canonical, normal, or standard form of a mathematical object is a standard way of presenting that object as a mathematical expression. Often, it is one which provides the simplest representation of an ...
to avoid redundancy. The DRY principle is stated as "Every piece of knowledge must have a single, unambiguous, authoritative representation within a system". The principle has been formulated by Andy Hunt and Dave Thomas in their book '' The Pragmatic Programmer''. They apply it quite broadly to include " database schemas, test plans, the build system, even documentation". When the DRY principle is applied successfully, a modification of any single element of a system does not require a change in other logically unrelated elements. Additionally, elements that are logically related all change predictably and uniformly, and are thus kept in sync. Besides using
methods Method ( grc, μέθοδος, methodos) literally means a pursuit of knowledge, investigation, mode of prosecuting such inquiry, or system. In recent centuries it more often means a prescribed process for completing a task. It may refer to: *Scien ...
and
subroutine In computer programming, a function or subroutine is a sequence of program instructions that performs a specific task, packaged as a unit. This unit can then be used in programs wherever that particular task should be performed. Functions may ...
s in their code, Thomas and Hunt rely on code generators, automatic build systems, and
scripting language A scripting language or script language is a programming language that is used to manipulate, customize, and automate the facilities of an existing system. Scripting languages are usually interpreted at runtime rather than compiled. A scripting ...
s to observe the DRY principle across layers.


Alternatives


WET

The opposing view to DRY is called WET, a
backronym A backronym is an acronym formed from an already existing word by expanding its letters into the words of a phrase. Backronyms may be invented with either serious or humorous intent, or they may be a type of false etymology or folk etymology. The ...
commonly taken to stand for "write everything twice" (alternatively "write every time", "we enjoy typing" or "waste everyone's time"). WET solutions are common in multi-tiered architectures where a developer may be tasked with, for example, adding a comment field on a form in a web application. The text string "comment" might be repeated in the label, the HTML tag, in a read function name, a private variable, database DDL, queries, and so on. A DRY approach eliminates that redundancy by using frameworks that reduce or eliminate all those editing tasks except the most important ones, leaving the extensibility of adding new knowledge variables in one place. Kevin Greer named and described this programming principle.


AHA

Another approach to abstractions is the AHA principle. AHA stands for "''Avoid Hasty Abstractions''", described by Kent C. Dodds as optimizing for change first, and avoiding premature optimization. and was influenced by Sandi Metz's "prefer duplication over the wrong abstraction". AHA is rooted in the understanding that the deeper the investment we've made into abstracting a piece of software, the more we perceive that the cost of that investment can never be recovered ( sunk cost fallacy). Thus, engineers tend to continue to iterate on the same abstraction each time the requirement changes. AHA programming assumes that both WET and DRY solutions inevitably create software that is rigid and difficult to maintain. Instead of starting with an abstraction, or abstracting at a specific number of duplications, software can be more flexible and robust if abstraction is done when it is needed, or, when the duplication itself has become the barrier and it is known how the abstraction needs to function. AHA programming was originally named MOIST by Dodds, later again by Daniel Bartholomae, and originally referred to as DAMP by Matt Ryer. There was a different programming principle already named DAMP and described by Jay Fields, and the community pushed back against the usage of MOIST, due to the cultural aversion to the word "moist". Dodds called for alternatives on
Twitter Twitter is an online social media and social networking service owned and operated by American company Twitter, Inc., on which users post and interact with 280-character-long messages known as "tweets". Registered users can post, like, and ...
, and suggested DATE as an alternative before settling on Cher Scarlett's suggestion of AHA.


See also

* Abstraction principle (programming) * Code duplication * Code reuse * Copy and paste programming * Database normalization and denormalization * Disk mirroring * Loop unrolling * Redundancy (engineering) *
Rule of three (computer programming) Rule of three (''"Three strikes and you refactor"'') is a code refactoring rule of thumb to decide when similar pieces of code should be refactored to avoid duplication. It states that two instances of similar code do not require refactoring, but ...
* Separation of concerns *
Single source of truth In information science and information technology, single source of truth (SSOT) architecture, or single point of truth (SPOT) architecture, for information systems is the practice of structuring information models and associated data schemas ...
(SSOT/SPOT) * Structured programming * Two or more, use a for * You aren't gonna need it (YAGNI)


References


External links

* Don't Repeat Yourself at WikiWikiWeb * Once and Only Once at WikiWikiWeb
97 Things Every Programmer Should Know (O'Reilly)

The myth of over-normalization
(discussion of academic extremes vs. real-world database scenarios) * {{DEFAULTSORT:Don't Repeat Yourself Software engineering folklore Computer programming folklore Programming principles