Incosistencias en la clase ActiveRecord

edited agosto 2007 in Bugs y Problemas
Hola amigos.

Después de analizar un poco el método find(…) de la clase ActiveRecord, me percaté que en este se hacían varias operaciones redundantes e innecesarias, luego de hacer las respectivas correcciones el método se redujo en mas de 30 líneas de código, a la vez que se incrementó la legibilidad del mismo.
Algunos de las operaciones innecesarias que habían eran las sig.:

• $what = get_params(func_get_args());
If(is_array($what)){…}
Siempre se verificaba que la variable $what fuera de tipo array, lo cual es innecesario ya que el método get_params(…) invariablemente retorna un objeto tipo array.

• Habían varias comparaciones innecesarias, como:
if(a == 1){ …}
Y más adelante se hacía
If(a != 1){…}
Lo cual se debería reducir a:
If(a == 1) {…} else {...} // “si no es igual, es diferente!”

• Aún cuando no se especificaban condiciones para la búsqueda, la consulta SQL que se generaba siempre contenía la clausula “WHERE 1=1”, lo cual obviamente si funcionaba porque siempre era verdadero; no obstante este tipo de hacks se deberían evitar en un framework serio como lo es kumbia, y así no empobrecer la calidad del código.

Creo que esas mismas incosistencias la tienen el resto de metodos para hacer select a la bd.

He subido una posible correccion y simplificacion de ese metodo al svn.

Comentarios

  • Se pregunta si es array por lo que el procedimiento cuando se envia un literal string o entero es mas corto que cuando es un array. Sin embargo si has probado que el funcionamiento sea el mismo no habria porblema en realizar el cambio.

    Saludos
  • edited 2:28
    Se pregunta si es array por lo que el procedimiento cuando se envia un literal string o entero es mas corto que cuando es un array. Sin embargo si has probado que el funcionamiento sea el mismo no habria porblema en realizar el cambio.

    Saludos

    Hola amigo Andres.

    Para demostrar porque sostengo que esa funcion siempre devolverá un objeto tipo array, a continuacion posteo el codigo del metodo tal cual esta en el archivo "libs/kumbia/tags.php":
    function get_params($params){
    	$data = array();
    	$i = 0;
    	foreach ($params as $p) {
    		if(ereg("([a-z_0-9]+[:][ ]).+", $p, $regs)){
    			$p = str_replace($regs[1], "", $p);
    			$n = str_replace(": ", "", $regs[1]);
    			$data[$n] = $p;
    		} else $data[$i] = $p;
    		$i++;
    	}
    	return $data;
    }
    

    Como se puede constatar, la variable $data siempre sera un array, una cosa diferente es que tenga un solo elemento o mas, pero por eso no dejará de ser un array.

    Ademas, creo que los otros puntos que anoté en el post anterior son importantes, ojalá y se revisaran.

    Gracias.[/code]
  • Me parecen buenas tus recomendaciones deberiamos trabajar en ello en la version del SVN

    Saludos
  • edited 2:28
    Me parecen buenas tus recomendaciones deberiamos trabajar en ello en la version del SVN

    Saludos

    Listo amigo, en eso estoy.
Sign In or Register to comment.