“Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.”1)
DRY not only states that code duplication shall be avoided. Rather DRY is a general rule that states that if there is duplication, there shall be some “single source of truth”. Also when one piece of information has several representations (like an object structure corresponding to a database schema) DRY demands one and only one representation being the definitive one. The other representations have to be generated automatically. The “one and only” representation can be one of the used representations or alternatively a third one.
If there are several representations of the same information (be it code or any other form of information), all of them have to be maintained separately while changing at the same time. There is the danger that at some point in time the different representations diverge which is a fault. But if there is a single source of truth, there is only one place where changes have to be applied. Then the representations cannot diverge.
See section contrary principles.
Andrew Hunt and David Thomas: The Pragmatic Programmer: From Journeyman to Master
|Principles In "The Pragmatic Programmer"|
|Don't Repeat Yourself||Make It Easy To Reuse||Eliminate Effects Between Unrelated Things||Program Close To The Problem Domain||Keep Knowledge in Plain Text||Write Code That Writes Code|
|Crash Early||Use Assertions to Prevent the Impossible||Use Exceptions for Exceptional Problems||Finish What You Start||Minimize Coupling Between Modules||Configure, Don't Integrate|
|Put Abstractions In Code, Details In Metadata||Always Design for Concurrency||Separate Views From Models||Abstractions Live Longer than Details|
Discuss this wiki article and the principle on the corresponding talk page.