jueves, 16 de mayo de 2013

CodeIgniter y el Modelo Vista Controlador

Cuando se desea desarrollar un sistema informático, ya sea de mediana o gran envergadura, se impone utilizar alguna metodología de desarrollo, y poner en práctica patrones arquitectónicos y de software. Los patrones son modelos de diseño y desarrollo propuestos debido a la cantidad de aplicaciones informáticas que tienen características similares, y basados en experiencias y buenas prácticas de desarrolladores de todos los tiempos.

En el desarrollo web, uno de los patrones de uso recurrente es el patrón arquitectónico Modelo-Vista-Controlador[1] (MVC, del inglés Model-View-Controller ), el cual separa la lógica de la aplicación de su representación al usuario y la comunicación al modelo, como se representa en la figura 1.

clip_image002

Figura 1 Representación del patrón de arquitectura Modelo-Vista-Controlador (MVC).

Para este patrón la Vista es la representación de todos los elementos de interacción con los usuarios, es decir, la página web visualizada en el navegador del usuario, con los componentes de formularios, etc. El Modelo encierra las funcionalidades para interactuar con los datos, generalmente de tipo persistente, en este caso, en esta capa se ubican las funciones de interacción con la base de datos. El Controlador por su parte, maneja las entradas de la Vista, abstrayendo su procesamiento para finalmente aplicar los cambios en el modelo. Esto permite hacer cambios en el control sin afectar los elementos que conforman la Vista y el Modelo.

En otras palabras, un código como el siguiente no debería estar en un único fichero.php. Fíjese que he capturado un valor de la vista, he consultado la base de datos y he mostrado los resultados, todo en un mismo segmento de código:

<?php
$connection = pg_connect("dbname=usurios port=5432 user=postgres password=postgres");

$name = $_POST['userName'];
$sentence = "select * from usuarios where nombre = '".$name."'";
$query = pg_Exec($connection, $sentence);
$num_rows = pg_num_rows($query);

echo '<span style="font-weight: bold;"> Se encontraron '.$num_rows.' usuarios con ese nombre.</span>';
?>

Según el MVC debería existir un modelo que haga la consulta, una vista que muestre el resultado, y un controlador que capture el post de la vista, pase el valor al modelo, reciba el resultado de la consulta y la pase a la vista para ser mostrado.

Pues bien, el CodeIgniter (un framework o conjunto de herramientas para desarrollo de sitios web usando PHP), permite no solo desarrollar proyectos mucho más rápido que lo que podría hacer si escribiera el código desde cero, sino que además se basa en el modelo-vista-controlador, permitiendo una buena separación entre lógica y presentación, y permitiendo que las páginas web contengan un mínimo de codificación. En CodeIgniter las clases del modelo no son requeridas.

Veamos el ejemplo anterior, pero usando clases de CodeIgniter, en tres ficheros diferentes:

//en el fichero users_model.php
class Users_model extends Model {
function get_users_quantity($name)
{
$this->db->where('nombre', $name);
$query = $this->db->get('usuarios');

return $query->num_rows();
}

}

 

//en el fichero users.php
class Users extends Controller {
function quantity()
{
$name = $this->input->post('userName');
$this->load->model('users_model');
$data['quantity'] = $this->users_model-> get_users_quantity($name);
$this->load->view('public_view', $data);
}

}

 

//en el fichero public_view.php


echo '<span style="font-weight: bold;"> Se encontraron '.$quantity.' usuarios con ese nombre.</span>';



Bueno, hemos dividido el código en tres partes correspondientes al modelo, al controlador y a la vista. Como pueden ver, en la clase Users_model se hace la consulta a la base de datos; la clase controladora Users actúa como interfaz entre el modelo y la vista, pidiendo al modelo un resultando y cargando la vista, a la cual se le pasa el quantity dentro del arreglo data; y en el fichero public_view.php correspondiente a la vista se muestran los resultados, con una total abstracción de la lógica de control y la interacción con la base de datos.

Con esta arquitectura, nunca verás una página .php en la barra de direcciones de tu navegador, sino el nombre del controlador y la función, por ejemplo, el caso anterior sería accesible por la dirección:

http://sitio/users/quantity

Los ficheros con las clases deben ser colocadas en carpetas específicas dentro del directorio del sitio de CodeIgniter, como se muestra en la figura 2.

clip_image002[4]

Figura 2 Estructura de carpetas de CodeIgniter.

Bueno, en este artículo he comentado las ventajas de usar Codeigniter para proyectos web medianos y grandes, donde es necesario mantener una organización del código y una estructura que garantice rapidez y seguridad, así como la comodidad que brinda para implementar nuestro sitio siguiendo la arquitectura MVC. En próximos artículos comentaré otras ventajas de usar CodeIgniter.





[1] Bahsoon, R. y W Emmerich: Evaluating software architectures: development, stability and evolution. Julio 2003



¿Te ha gustado este Post? Compártelo con tus amigos.

No hay comentarios:

Publicar un comentario

IconIconIcon