DRY

DRY - Don´t Repeat Yourself : No Te Repitas
No tener la misma cosa en dos o más lugares.
Si cambia uno, usted tiene que cambiar lo demás. Y es difícil acordarse donde se encuentran las partes para realizar el cambio.


Wikipedia :

El principio No te repitas (en inglés Don't Repeat Yourself o DRY, también conocido como Una vez y sólo una) es una filosofía de definición de procesos que promueve la reducción de la duplicación especialmente en computación. Según este principio ninguna pieza de información debería estar duplicada nunca debido a que la duplicación incrementa la dificultad en los cambios y evolución posterior, puede perjudicar la claridad y crea un espacio para posibles inconsistencias. Por "pieza de información" podemos, en un sentido amplio, entender desde datos almacenados en una base de datos pasando por el código fuente de un programa de software hasta llegar a información textual o documentación.

Cuando el principio DRY se aplica de forma eficiente los cambios en cualquier parte del proceso requieren cambios en un único lugar. Por el contrario, si algunas partes del proceso están repetidas por varios sitios, los cambios pueden provocar fallos con mayor facilidad si todos los sitios en los que aparece no se encuentran sincronizados.


¿Cómo se presenta la Duplicación?

La mayoría de la duplicación que vemos cae en una de las siguientes categorías:
- Duplicación impuesta. Los desarrolladores sienten que no tienen opción -el entorno parece que requiere duplicación.
- Duplicación inadvertida. Los desarrolladores no se percatan que están duplicando información.
- Duplicación impaciente. A los desarrolladores les da pereza y duplican porque parece más fácil.
- Duplicación entre desarrolladores. Muchas personas en un equipo (o en diferentes equipos) duplican una pieza de información.




public class Line {
public Point start;
public Point end;
public double length;
}



¿Qué tiene de malo este código? Que la longitud de la línea debe ser modificada cada que cambiamos alguno de los puntos de la misma. Por ello, si se nos olvida actualizar dicho valor incurriremos en un error de lógica bastante difícil de encontrar. Es mucho más fácil eliminar el campo o si forzosamente debemos tenerlo, podemos indicar al objeto que actualice el valor o que lo recalcule cada que se lo pidamos:




public class Line {
private Point start;
public Point end;
public double length() {
return Math.sqrt( Math.pow( ( start.getX() - end.getX() ),2 )
+ Math.pow( ( start.getY() - end.getY() ),2) );
}
}


Comentarios