McAnam » Foros » Foro PHP
trabajar PHP en capas



  Kenia        17/03/2012 04:13:47
Hola, necesito realizar mi tesis con PHP pero tengo que hacerlo en capas alguien me podría ayudar con un ejemplo detallado de esta arquitectura.


Gracias

Pdta. ES URGENTE =)



  McAnam        10/04/2012 12:56:18
Hola, trabajar en capas, se basa en dividir el proyecto en "capas" independientes (o lo más independientes posibles), es decir, que si se quisiera cambiar una parte (una capa), esto no afectaría (o apenas), al resto de capas, en web se suele trabajar en tres capas:

Capa de presentación:
Está capa sería el diseño puro (nunca contendría código PHP), por lo general HTML / CSS. En partes donde debe ponerse valores de variables, se suelen poner campos especiales, para en la parte de negocio (código) tratarlos, por ejemplo:
Hola [NOMBRE], bienvenido.

Capa de negocio:
Esta capa contendría todo el código, en este caso PHP.
Aquí además se tratarían los valores pasados en la capa diseño para formatearlos, concatenarlos, etc. (preferiblemente en una función o clase separada e independiente). Además de las llamadas a datos (también preferiblemente lo mas independiente posible).
Además se podría dividir en 2 capas más:
- Funciones / clases comunes: Contendría todos los códigos que puedan ser necesarios, de forma que estén centralizados.
- fuentes: Contendría los fuentes encargados de realizar cada acción (por ejemplo index.php), deberían ser lo más escuetos posibles y se limitarían a llamar a las funciones necesarias.

Capa de datos:
Se encargaría de los manejos de datos, por ejemplo, la Base de Datos. En PHP, esta capa suele ser la mas "difuminada", ya que se suele usar MySQL, que es bastante limitado en cuanto a procesos almacenados, triggers, funciones, etc. Pero esta parte, debería de encargarse de todas las acciones hacia la BD y lo ideal, es que este en la BD (o proceso independiente), es decir si esta parte esta hecha en PHP y mañana quieres cambiar a ASP o JAVA (capa negocio) y tienes esta parte en PHP, tendrías que cambiar 2 capas en vez de una, con lo que la filosofia se va al carajo.

Un ejemplo en capas, de por ejemplo un formulario de login, podría ser:

Capa de presentación:

TEMPLATE INICIO_CORRECTO:
[CABECERA]
<p>Bienvenido de nuevo [NOMBRE]</p>
[PIE]

TEMPLATE INICIO_ERRONEO:
[CABECERA]
<p>Se ha producido un error en el login</p>
[PIE]


Capa de negocio:

login.php:

// includes

$usu = funcion_trata_POST($_POST["usuario"]);
$pas = funcion_trata_POST($_POST["password"]);

// Se llama a las funciones encargada de tratar con BD
funcion_BD_conecta();
// Se llama a un procedimiento almacenado, NO SE HACE SQL
$result = funcion_BD_ejecuta("LOGIN ('$usu', $pas)");
funcion_BD_desconecta();

if ($result)
    funcion_TEMPLATE("INICIO_CORRECTO");
else
    funcion_TEMPLATE("INICIO_ERRONEO");

CAPA DATOS:
En este caso una BD con un proceso almacenado, que al pasarle un usuario y password, devuelva si es correcto (o por ejemplo, el nombre de usuario) o no (false). Tendría además, por ejemplo un proceso para cuando un usuario se de de alta (incluso comprobando que los datos pasados sean correctos).


Como dije antes, la parte de negoción tendría 2 "conectores", uno para diseño y otro para BD, como dije antes, estos deben ser lo más escuetos posibles, siguiendo el ejemplo:

Conector presentación:
tendría la función "funcion_TEMPLATE", que trataría los templates, simplemente reemplazando, en este ejemplo los [XXXX] por su valor.

Conector BD:
Siguiendo con el ejemplo, tendría 3 funciones (dificilmente necesitaría mas):
funcion_BD_conecta: Conecta a BD
funcion_BD_ejecuta: Ejecuta sentencias en la BD, nunca deberían ser SQL, sino procedimientos almacenados.
funcion_BD_desconecta: Desconecta de la BD



Volver al foro PHP