Articulo de referencia

No te repitas

" No te repitas " ( DRY, por sus siglas en inglés) es un principio de desarrollo de software que busca reducir la repetición de información que probablemente cambie, reemplazánd...

" No te repitas " ( DRY, por sus siglas en inglés) es un principio de desarrollo de software que busca reducir la repetición de información que probablemente cambie, reemplazándola con abstracciones que tengan menos probabilidades de cambiar, o utilizando la normalización de datos , que evita la redundancia desde el principio.

El principio DRY se enuncia como "Cada pieza de conocimiento debe tener una única representación autorizada, inequívoca y sin ambigüedades dentro de un sistema". Este principio fue 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 correctamente, la modificación de cualquier elemento de un sistema no requiere un cambio en otros elementos lógicamente no relacionados. Además, los elementos que están lógicamente relacionados cambian de forma predecible y uniforme, y por lo tanto se mantienen sincronizados . [ 3 ] Además de usar 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 scripting para observar el principio DRY en todas las capas.

principio de elección única

Un caso particular de DRY es el principio de elección única. Fue definido por Bertrand Meyer como: "Siempre que un sistema de software deba admitir un conjunto de alternativas, un solo módulo del sistema debe conocer su lista exhaustiva". [ 4 ] Se aplicó al diseñar Eiffel .

Alternativas

HÚMEDO

La visión opuesta a DRY se llama WET, un acrónimo que comúnmente significa escribir todo dos veces [ 5 ] (o escribir cada vez , disfrutamos escribiendo o hacemos perder el tiempo a todos ). Las soluciones WET son comunes en arquitecturas de múltiples niveles donde un desarrollador puede tener la tarea de, por ejemplo, agregar un campo de comentarios en un formulario de una aplicación web. La cadena de texto "comentario" podría repetirse en la etiqueta, la etiqueta HTML, en el nombre de una función de lectura, una variable privada, DDL de la 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. [ 6 ] Esta conceptualización de "WET" como una alternativa a la programación "DRY" existe desde al menos 2002 en el mundo Java, aunque se desconoce quién acuñó el término. [ 7 ]

AHA

Otro enfoque para las abstracciones es evitar las abstracciones apresuradas (AHA). AHA se basa en la comprensión de que cuanto mayor sea la inversión que los ingenieros hayan realizado en la abstracción de una pieza de software, mayor será la percepción de que el costo de esa inversión nunca se podrá recuperar ( falacia del costo hundido ). Por lo tanto, los ingenieros tienden a seguir iterando sobre la misma abstracción cada vez que cambian los requisitos. La programación AHA asume que tanto las soluciones WET como DRY inevitablemente crean software 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 misma se ha convertido en la barrera y se sabe cómo debe funcionar la abstracción. Según Kent C. Dodds, se trata de optimizar primero para el cambio y evitar la optimización prematura. [ 8 ] [ 9 ]

El término fue acuñado por la ingeniera de software Cher Scarlett y la práctica fue descrita originalmente por la ingeniera de software y autora Sandi Metz como "preferir la duplicación a la abstracción incorrecta". [ 9 ]

Véase también

Referencias

  1. Hunt, Andrew; Thomas, David (1999). El programador pragmático: del aprendiz al maestro (1.ª  ed.). EE. UU.: Addison-Wesley. pág . 328. ISBN  978-0-201-61622-4.
  2. Dave Thomas, entrevistado por Bill Venners (10 de octubre de 2003). "Ortogonalidad y el principio DRY" . Consultado el 1 de diciembre de 2006 .
  3. Nguyen, Hoan Anh; Nguyen, Tung Thanh; Pham, Nam H.; Al-Kofahi, Jafar; Nguyen, Tien N. (2012). "Gestión de clones para software en evolución" . IEEE Transactions on Software Engineering . 38 (5): 1008– 1026. doi : 10.1109/TSE.2011.90 . ISSN 0098-5589 . Recuperado el 4 de julio de 2026 . 
  4. Construcción de software orientado a objetos, 2.ª edición, página 63
  5. Pai, Praseed; Xavier, Shine (31 de enero de 2017). Patrones de diseño .NET . Packt Publishing Ltd. ISBN 978-1-78646-186-5.
  6. Justin Lee (8 de marzo de 2006). "DRY es para perdedores" . Recuperado el 31 de agosto de 2013 .
  7. ^ Zig Zichterman (8 de agosto de 2002). "JavaOne 2002: Notas de Zig" . Consultado el 9 de enero de 2024 .
  8. Kent C. Dodds (1 de abril de 2019). "Programación AHA" . Consultado el 8 de mayo de 2021 .
  9. 1 2 Morris, Kief (2025). Infraestructura como código: Diseño y entrega de sistemas dinámicos para la era de la nube (Tercera ed.). Sebastopol, CA: O'Reilly. ISBN  978-1-0981-5031-0.
  • No te repitas en WikiWikiWeb
  • Una sola vez en WikiWikiWeb
  • 97 cosas que todo programador debería saber (O'Reilly)
  • El mito de la sobrenormalización (análisis de los extremos académicos frente a los escenarios de bases de datos del mundo real)
  • Wilson G, Aruliah DA, Brown CT, Chue Hong NP, Davis M, Guy RT, et  al. (2014). " Mejores prácticas para la computación científica" . PLOS Biol . 12 (1) e1001745. arXiv : 1210.0530 . doi : 10.1371/journal.pbio.1001745 . PMC 3886731. PMID 24415924. No te repitas (ni a otros) .