viernes, 18 de julio de 2014

Buenas prácticas - Tip #3 - Utilizar el principio DRY (No te repitas - Don't Repeat yourself)


El principio DRY es una buena practica que debemos procurar para todos aquellos que estamos comenzando a desarrollar en PHP, se base en que un código funcional se realice una y solo una vez, de modo tal que pueda ser reutilizable en múltiples aplicaciones. DRY por sus siglas en ingles (Don’t Repeat Yourself) o No te Repitas, es una filosofía de procesos la cual promueve la reducción de código duplicado.

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 una aplicación hasta llegar a información textual o documentación.

El código duplicado hace que nuestro código sea más difícil de mantener y comprender además de generar posibles inconsistencias. Para ello, dependiendo del caso concreto, la refactorización, la abstracción o el uso de patrones de diseño pueden ser alternativas viables.

La frase utilizada en idioma inglés es "Don’t be WET, stay DRY", que implica principios de programación opuestos.  El término WET (inglés: mojado), al cual se le han dado muchos significados: “We Edit Terribly”, “We Enjoy Typing”, “Write Everything Twice”, etc. Obviamente, significa que existen “piezas de conocimiento” con múltiples representaciones, que podría traducirse como tener la misma información repetida varias veces.

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.

Veamos un ejemplo práctico, es común utilizar esta codificación:
<?php
 $mysql  = mysql_connect ( 'localhost',  'usuario_mysqladmin', 'clave_mysqladmin' );
 mysql_select_db( 'DB_NAME' ) or die( "¡Disculpe !! No se pudo seleccionar la Base de Datos.");
?>

Utilizando el principio DRY, el codigo anterior puede reflejarse de esta forma:

<?php
 $db_host = 'localhost';
 $db_usuario = 'usuario_mysqladmin';
 $db_clave = 'clave_mysqladmin ';
 $db_database = 'DB_NAME';
 $mysql = mysql_connect($db_host, $db_usuario, $db_clave);
 mysql_select_db($db_database);
?>

Veamos un ejemplo utilizando la función printf().

Ejemplo de codificación "incorrecta":

<?php
echo '<ul>';
foreach ($aArticulos as $aArticulo)
{
// <li><a href="enlace.html" title="título">título</a> (enlace.html)</li>

 printf('<li><a href="%s" title="%s">%s</a> (%s)</li>',
  $aArticulo['enlace.html'],
  $aArticulo['título'],
  $aArticulo['título'],
  $aArticulo['enlace.html']);
}
echo '</ul>';
?>

El mismo código aplicando el principio DRY:

<?php
echo '<ul>';
foreach ($aItems as $aItem)
{
 printf('<li><a href="%1$s" title="%2$s">%2$s</a> (%1$s)</li>',
   $aArticulo['enlace.html'],
   $aArticulo['título']);
}
echo '</ul>';
?>

Una sugerencia de cuando podemos aplicar este principio:

  1. Si se repite el mismo código varias veces en sucesión, probablemente debería estar usando un bucle
  2. Si se repite el mismo código varias veces en su programa, probablemente deba a dividir ese código a cabo en una función
  3. Si usted se encuentra escribiendo el mismo código en varios programas, probablemente debería estar usando un archivo incluido
  4. Si usted se encuentra escribiendo código complejo para hacer una tarea simple común es probable que haya una función integrada para ayudarle. 
  5. Si usted se encuentra escribiendo código que -. Seguramente - alguien ha hecho antes, mira las bibliotecas de recursos para el idioma que está utilizando - PEAR, PECL, CPAN, Gems ... o en SourceForge.

Para mayor información pueden consultar la Wikipedia | Wikipedia en Inglés | Consejos de Programación

No hay comentarios.:

Publicar un comentario