Buenas prácticas en un MVC

En un framework de desarrollo basado en el patrón Modelo-Vista-Controlador como es el caso de CakePHP, es muy recomendable conocer cada una de las capas y tratar de ubicar el código necesario en la capa más adecuada.

Conforme más he ido usando este patrón más me he dado cuenta (por lo menos en los desarrollos que me he visto involucrado) que lo más eficiente es lo que denomino “subir el código” (permitirme poner nombre a algo que ya existe, pero me hacía ilusión). El hecho de poner el máximo código posible o mejor dicho, el mayor número de lógica en los Modelos.

Con el siguiente ejemplo espero explicarme mejor:

Pongamos que tenemos que mostrar los registros de una base de datos, por ejemplo, personas. Pero no todas las personas, únicamente las de sexo femenino.

1.- Manera realmente fea

Obtenemos desde el controlador mediante un find(’all’) todos los registros de la tabla y en nuestra vista, dentro del bucle de obtención de datos foreach. Añadimos un if que sólo muestre los registros deseados.

controlador

$this->set('personas', $this->Personas->find('all');

vista

foreach($persona as $persona):
if( $persona['Personas']['sexo'] == 'M' ) {
pr($persona);
}
endforeach;

2.- Manera menos fea

Desde el controlador filtramos en la consulta al modelo los registros que deseamos. Liberando a la vista de la lógica pudiéndose dedicar únicamente a mostrar la información.

controlador

$this->set('personas', $this->Personas->find('all', array('conditions'=>array('sexo'=>'M')));

vista

foreach($persona as $persona):
pr($persona);
endforeach;

3.- Mejor manera

Trasladamos toda la lógica al modelo. El controlador únicamente llama a un método del modelo y la vista únicamente muestra información.

modelo

function getMujeres(){
return $this->find('all', array('conditions'=>array('sexo'=>'M')));
}

controlador

$this->set('personas', $this->Personas->getMujeres());

vista

foreach($persona as $persona):
pr($persona);
endforeach;

De esta última manera, liberamos la vista, haciéndola menor, fácil de mantener y reutilizable. Sobre todo si quien la manipula es un maquetador con no muchos conocimientos de programación.
El controlador únicamente se dedica a realizar la acción pedida, ejecutando si es preciso métodos del modelo para poder proporcionar la información a la vista. Cambiar la fuente de información es tan sencillo como llamar a uno u otro método del modelo.
El modelo ahora tiene toda la lógica de obtención de información. Proporcionando métodos de acceso a la información que pueden ser utilizados por el controlador.

Espero haberme explicado y como no, abierto a aportaciones y comentarios.

Tags:

4 Responses to “Buenas prácticas en un MVC”

  1. krusty999 Says:
    April 16th, 2008 at 7:14 am

    Hola muy buena nota, voy ponerla en práctica en el próximo proyecto.

    Estoy probando cakephp + extjs y se me esta complicando bastante. Así que si conoces algo o has probado extjs(simpre trabajando desde dentro de cake) me gustaria que compartas algo.

    Saludos.

  2. admin Says:
    April 16th, 2008 at 7:26 am

    Genial!
    Respecto a extjs, decirte que no la he probado. Y mi experiencia de JS con CakePHP se ha limitado a incorporar jquery sin otra cosa más que usar el helper de Javascript que viene con cake y nada más. El resto, el código JS, está en su archivo js correspondiente.

  3. faemino.net » Blog Archive » Usar temas Says:
    October 22nd, 2008 at 7:09 am

    [...] Esto hace más evidente que el mayor código posible de la lógica (en realidad todo) debe residir en el controlador y en mayor medida en el modelo. [...]

  4. Recursos para iniciarse con CakePHP | Mareos de un Geek Says:
    November 21st, 2008 at 1:04 am

Leave a Reply