Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/11/2013, 08:58
Avatar de nanotime
nanotime
 
Fecha de Ingreso: noviembre-2011
Ubicación: Cd. Guayana
Mensajes: 145
Antigüedad: 12 años, 6 meses
Puntos: 6
Pregunta ¿Es recomendable un método que haga muchas cosas en un modelo?

La verdad es que tengo esta duda de "buenas costumbres".

Estaba limpiando algo de código de un modelo y hasta este punto no había presentado problema alguno, pero cuando llegué a los métodos que hacen consultas a las bases de datos me di cuenta de que son redundantes, osea, tengo un método para pedir todos los items de una bd, luego uno para pedirlos por su categoría y otros por su id o su slug.

El código se ve mas o menos así en esa sección:

Código PHP:
Ver original
  1. public function get_curso($id){
  2.         $rs = $this->db->get_where('cursos', array('id' => $id));
  3.            
  4.         if($rs->num_rows() > 0){
  5.             return $rs->row_array();
  6.         }
  7.         else{
  8.             return false;
  9.         }
  10.     }
  11.  
  12.         public function get_categoria($cat)
  13.     {
  14.         $rs = $this->db->get_where('cursos', array('categoria' => $cat));
  15.  
  16.         if ($rs->num_rows() > 0) {
  17.             return $rs;
  18.         }
  19.         else{
  20.             return false;
  21.         }
  22.     }

Básicamente es eso cuando digo que son muchas funciones para mas o menos lo mismo, de hecho hasta se repite código ... la cosa es que he estado tratando de tener una sola función "get_curso" que devuelva determinada consulta luego de recibido un parámetro y que, si ninguno de estos se le pasa, simplemente devuelva la consulta general de la base de datos (para el dashboard).

¿Código? Este:

Código PHP:
Ver original
  1. public function get($id = false, $slug = false)
  2.     {
  3.         if (!$id || !$slug) {
  4.             $query = $this->db->get('cursos');
  5.             return $query->result_array();
  6.         }
  7.         elseif ($slug) {
  8.             $query = $this->db->get_where('cursos', array('slug' => $slug));
  9.             return $query->row_array();
  10.         }
  11.         else {
  12.             $query = $this->db->get_where('cursos', array('id' => $id));
  13.             return $query->row_array();
  14.         }
  15.     }

Es un borrador, y de hecho me da problemas, no de sintaxis sino en las vistas y el controlador, porque los errores que me lanza son justamente de "no existe la variabe tal", simplemente no consigue nada pero al parecer funciona porque me pinta la vista, solo que me da errores en el contenido.

¿Es buena idea o costumbre tener un método que haga tantas cosas? ¿O es mejor separar cada consulta con un método?

Gracias por adelantado