" No te repitas " ( DRY ) es un principio de desarrollo de software cuyo objetivo es reducir la repetición de información que es probable que cambie, reemplazándola con abstracciones que tienen menos probabilidades de cambiar o utilizando la normalización de datos que evita la redundancia en primer lugar.
El principio DRY se enuncia como "Cada pieza de conocimiento debe tener una representación única, inequívoca y autorizada dentro de un sistema". El principio ha sido formulado por Andy Hunt y Dave Thomas en su libro The Pragmatic Programmer . [1] Lo aplican de forma bastante amplia para incluir esquemas de bases de datos , planes de prueba , el sistema de compilación e incluso la documentación . [2] Cuando el principio DRY se aplica con éxito, una modificación de cualquier elemento individual de un sistema no requiere un cambio en otros elementos lógicamente no relacionados. Además, todos los elementos que están relacionados lógicamente cambian de forma predecible y uniforme, y por lo tanto se mantienen sincronizados . Además de utilizar métodos y subrutinas en su código, Thomas y Hunt se basan en generadores de código , sistemas de compilación automáticos y lenguajes de script para observar el principio DRY en todas las capas.
Un caso particular de DRY es el principio de elección única . Fue definido por Bertrand Meyer como: “Siempre que un sistema de software debe soportar un conjunto de alternativas, uno y sólo un módulo en el sistema debe conocer su lista exhaustiva”. [3] Fue aplicado al diseñar Eiffel .
La visión opuesta a DRY se llama WET, un acrónimo que comúnmente se toma para significar escribir todo dos veces [4] (alternativamente escribir cada vez , disfrutamos escribiendo o perdemos el tiempo de todos ). Las soluciones WET son comunes en arquitecturas de múltiples niveles donde un desarrollador puede tener la tarea, por ejemplo, de agregar un campo de comentario en un formulario en una aplicación web. La cadena de texto "comentario" puede repetirse en la etiqueta, la etiqueta HTML, en un nombre de función de lectura, una variable privada, DDL de base de datos, consultas, etc. Un enfoque DRY elimina esa redundancia mediante el uso de marcos que reducen o eliminan todas esas tareas de edición excepto las más importantes, dejando la extensibilidad de agregar nuevas variables de conocimiento en un solo lugar. [5] Esta conceptualización de "WET" como una alternativa a la programación "DRY" ha existido desde al menos 2002 en el mundo Java, aunque no se sabe quién acuñó el término. [6]
Otro enfoque de las abstracciones es el principio AHA, que significa evitar abstracciones apresuradas y que Kent C. Dodds describió como optimizar para el cambio primero y evitar la optimización prematura. [7] y fue influenciado por el principio de Sandi Metz de "preferir la duplicación a la abstracción incorrecta". [8]
La AHA se basa en la comprensión de que cuanto más invierten los ingenieros en la abstracción de un software, más perciben que el costo de esa inversión nunca se puede recuperar ( falacia del costo irrecuperable ). Por lo tanto, los ingenieros tienden a continuar iterando sobre la misma abstracción cada vez que cambia el requisito. La programación AHA supone que tanto las soluciones WET como las DRY inevitablemente crean software que es rígido y difícil de mantener. En lugar de comenzar con una abstracción, o abstraer en un número específico de duplicaciones, el software puede ser más flexible y robusto si la abstracción se realiza cuando es necesaria o cuando la duplicación en sí se ha convertido en la barrera y se sabe cómo debe funcionar la abstracción.
La programación AHA fue originalmente denominada "código húmedo" por Dodds, luego nuevamente por Daniel Bartholomae, [9] y originalmente denominada DAMP ( Don't Abstract Methods Prematurely ) por Matt Ryer. [10] Ya había un principio de programación diferente llamado DAMP ( Descriptive And Meaningful Phrases ) y descrito por Jay Fields, [11] y la comunidad se opuso al uso de MOIST, debido a la aversión cultural a la palabra húmedo . [12] Dodds pidió alternativas en Twitter y sugirió DATE como una alternativa antes de decidirse por la sugerencia de Cher Scarlett de AHA. [7] [13] [14]
No se repita (ni repita lo que otros dicen)