Custom Search
Bloggers Activos
Emacs como IDE para CakePHP aarkerio
La Negación del Viaje Lunar tonathiu
Porque los mononeurones si tenemos madre! blacksoul
BrunoFerías thot
The Art vendaval
Aclimatación extraterrestre ¿para qué? ahuramazdah
¿A que le tienes miedo? teosho
Sobre nazis, terror y medios tonathiu
Amenazas a la cuarta dimensión ¿de veras? ahuramazdah
Tarjeta Broadcom BCM94311MCG rev 02 teosho
Last Download
Segunda Fundación
Segunda Fundación
Pidiendo OpenSolaris 2008.5
vendaval
Sospechosismo
aarkerio
Slackware 12.1 Final
vendaval
Jaime Maussan da por auténtico video trucado del chupacabras hecho en Blender 3D
asarch
Linux hot girl
aarkerio
Calderón puede ser sujeto a juicio político, sostiene Carrancá
tonathiu
La desnutrición en México
aarkerio
Sistema Infalible
ordbal
Histórico
aarkerio
Nietzsche en la FCPyS
aarkerio
Google Groups Karamelo
Visit this group
GNU/Linux
GNU/Linux
Hacktivismo
Hacktivismo
Debian
Debian
NetBSD
NetBSD
WWW
WWW
Guia Linux
Guia Linux
Server Side
Server Side
Ofimatica
Ofimatica
Despabilando...
Despabilando...
Mundo Maya
Mundo Maya
Literatura
Literatura
Agora
Agora
Psicologia
Psicologia
Economia
Economia
Ambientalismo
Ambientalismo
Desarrollo
Desarrollo
Biologia
Biologia
No a la crueldad
No a la crueldad

Hacktivism

LinuxChix button

WWW \ MVC en tres pasos, en PHP y sin objetos
WWW
MVC en tres pasos, en PHP y sin objetos

Este artículo ha sido consultado en 546 ocasiones.

MVC en tres pasos, en PHP y sin objetos (y nada más)

MVC significa "Modelo, Vista y Controlador".

A grandes rasgos: el Modelo es todo acceso a base de datos, y las funciones que llevan lo que llaman "lógica de negocio". O sea, las funciones más "pequeñas" con significado: ingresar una cantidad, obtener un listado de historias, ...

La vista, en una aplicación web, es el HTML (o XML, WAP, PDF, ...) y lo necesario para convertir datos en HTML. El acceso a bases de datos no es vista. La gestión de sesiones no es vista.

El controlador es lo que une la vista y el modelo. Por ejemplo, son las funciones que toman los valores de un formulario, consultan la base de datos (a través del modelo) y producen valores, que la vista tomará y convertirá en HTML.

1. M de Modelo

Las funciones "con significado" que mencioné antes deberían estar agrupadas lógicamente. O sea, no de una "forma lógica", sino que las que sean parecidas estén juntas.

El modelo incluye todas las funciones necesarias para acceder a bases de datos, recursos de la máquina, etc.

Estas funciones son de acceso a base de datos. Son funciones muy simples, que por si solas no tienen "significado" fuera de la base de datos:

function db_quitar_dinero ($cuenta, $cantidad)
function db_contar_historias ()
function db_buscar_productos_de_fabricante ($fabricante)
function db_borrar_usuario ($usuario)

Estas funciones tienen "significado": son operaciones "reales" sobre cosas "reales":

function obtener_historias ($num)
function transferir_dinero ($cantidad, $orig, $dest)
function añadir_carrito ($producto, $unidades, $usuario)

La principal diferencia es que las primeras son simples operaciones sobre la base de datos, y que las segundas pueden componerse de una o varias llamadas a funciones de acceso a base de datos y, posiblemente, cierta cantidad de "procesamiento".

Ejemplo:


function db_obtener_productos () {
  $prod = array();

  mysql_pconnect (DBHOST, DBUSER, DBPASS);
  mysql_select_db (DBNAME);
  $query = "SELECT id, nombre, cantidad, descripcion FROM productos";
  $result = mysql_query ($query);
  while ($row = mysql_fetch_array ($result)) {
array_push ($prod, $row);
  }

  return $prod;
}

function obtener_productos ($letra) {
  if ($letra == "") {
return db_obtener_productos ();
  } else {
return db_obtener_productos_con_letra ($letra);
  }
}



Razones

Cada acceso a base de datos se pone en su función individual porque, de esta forma, si se cambia de gestor de bases de datos este cambio sólo afecta a estas funciones, no al resto de la aplicación.

Tener el modelo bien delimitado permite la existencia de varias aplicaciones que compartan el mismo modelo (por ejemplo, una aplicación "tienda" y una "contabilidad" que accedan a las bases de datos de inventario, ventas, ...)

2. C de Controlador

El controlador no accede (directamente) a la base de datos, ni genera (directamente) HTML; se limita a obtener valores, procesarlos y obtener otros valores (además de la gestión de sesiones, cookies, logs y ese tipo de tonterías). Lo típico es recoger los valores de un formulario, procesarlos, trabajar un poco con la base de datos, procesar algo más, y almacenar el resultado en una o varias variables:


$letra = $POST["letra"]
if (($letra < "A") || ($letra > "Z")) {
  include "letranovalida.php";
} else {
  $productos = obtener_productos ($letra);
  include "listadoproductos.php";
}



letranovalida.php y listadoproductos.php son parte de la vista. El segundo fichero hace uso de la variable $productos para mostrar el listado. Como se puede ver, el controlador no se mete con HTML; se limita a obtener el listado de la base de datos y pasárselo, tal cual, a la vista.

Razones

De este modo, el código que "hace algo" está perfectamente separado del código dedicado a crear HTML, lo que ayuda a evitar el spaghetti.

3. V de Vista

La vista es la parte de la aplicación dedicada a generar HTML. Puede ser simple HTML estático:


<h1>Listado de productos</h1>


O HTML dinámico generado en respuesta a una consulta, por ejemplo:


<table>
<?php foreach ($productos as $p) { ?>
<tr><td><a href="verproducto.php?id=<?=$p["id"]?>"><?=$p["nombre"]?></a></td>

<td><?=$p["cantidad"]?></td></tr>
<?php } ?>
</table>


La vista no debería llamar a ninguna función; debería limitarse a construcciones de control de flujo simple: if, for/foreach, while, ...

Todas las variables empleadas por la vista deberían proceder del controlador; utilizar directamente variables procedentes del usuario es una práctica muy peligrosa.

Razones

Tener la vista separada del controlador permite cambiar la aplicación para que genere, en lugar de HTML, algo distinto (por ejemplo, WML), sin tener que tocar más que una parte completamente delimitada del código.

Básicamente, MVC es esto. Lo demás (objetos, etc) son refinamientos.


Jacobo Tarrío

Last modified: Tue Dec 3 14:35:55 CET 2002
$Id: mvc.html,v 1.2 2002/12/03 13:36:12 jtarrio Exp $

Última actualización: 2007-04-29 10:56:59-05

Printable version

Add comment:



Captcha




Que estas haciendo?
teoshoteosho está:
Preparandome para el viaje a Puerto Vallarta... que triste...
1 hour, 7 minutes ago

scarecrowscarecrow está:
Du hast?
5 hours, 10 minutes ago

der_teufelder_teufel está:
Ich habe einen Kater, aber nicht so schlecht...
12 hours, 45 minutes ago

rnstuxrnstux está:
Y yo un Abrazo.
1 day, 12 hours ago

saidjosesaidjose está:
Dandole su habrazote a mi santa madre que me soporta
1 day, 14 hours ago

dsquiddsquid está:
esperando a que este el pozole
1 day, 15 hours ago

Que estuvimos haciendo >>
Chipotle Software

En tu equipo tienes:
Sólo Windows
Windows y Linux
Sólo Linux
Linux y un BSD
Solaris, linux y BSD
Sólo MacacOS
Rapiditas
Problemas de Lenguaje en niños
10410 lecturas
Sexualidad infantil y juvenil
9166 lecturas
Anticoncepción de Emergencia
7840 lecturas
Rompiendo cualquier clave WEP en unos pocos minutos
6917 lecturas
Sinapsis y exocitosis
6227 lecturas
Mi primer CakePHP, mmmmm cakeee
5259 lecturas
Evolución filética en las hepáticas
4697 lecturas
BASH y Primeros Comandos
4012 lecturas
CakePHP II Active Record
3742 lecturas
Cómo convertirse en hacker
3619 lecturas
Add to Technorati Favorites

ir arriba
Hasta donde puedo recordar, no hay una sola palabra en los Evangelios en alabanza de la inteligencia. B. Russell

The Queen is here Mozilla Firefox The Best DataBase CakePHP Framework XHTML GNU Hacker Chipotle Software

Too Cool for Internet Explorer