Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/05/2010, 10:36
Edanoir
 
Fecha de Ingreso: mayo-2010
Mensajes: 4
Antigüedad: 14 años
Puntos: 0
Consulta programacion en capas

Gente, acudo a ustedes para que me ayuden un poco a entender como funciona la programacion en capas con PHP.

Antes que nada vale la pena remarcar que si, estuve leyendo en google, tambien dentro del foro. Pero igualmente me sigue faltando algo para comprender este estilo de programacion.


Para comenzar me gustaria dar un pequeño ejemplo de lo que hice para saber si voy encaminado.

Dentro de mi proyecto (llamemoslo "Capas") tengo la siguiente estructura:

Código:
/aplicacion/dominio/
/aplicacion/persistencia/
/aplicacion/presentacion/
/config/
Ahora bien, ya planteada mi estructura (la que separe fisicamente para mantener mejor orden) explico como puse unos scripts para que me digan si estoy encaminado.

Aclaro antes de seguir con varios de los codigos los saque del foro.

En config supongamos que tengo el archivo import.php (creo que el codigo lo saque de GatorV y lo modifique un poco para hacer mas sencillo el ejemplo)

Archivo import.php
Código PHP:
<?php
function import$class_path ) {
    
$class_path str_replace"."DIRECTORY_SEPARATOR$class_path );
    
$class_path "./aplicacion/".$class_path;
    require( 
$class_path.".php" );
}  
?>
Ya con esto planteado supongamos que quiero hacer una simple consulta a la base de datos y aqui empieza mi dilema en como trabajar con las capas.

Si mal no entendi, uso un archivo (llamemosle listado.php) en el directorio raiz de mi proyecto (/Capas/listado.php)

Archivo listado.php
Código PHP:
<?php
include './config/import.php';

//importo estas 2 clases que arman el estilo de la pagina
import"presentacion.header" );
import"presentacion.footer" );

//importo la case validacion la cual supongamos que hace una validacion antes de hacer la consulta a la db
import"dominio.validacion" );

//importo la clase db_query que realiza una consulta a la base de datos
import"persistencia.db_query" );

//instancia un objeto que arma la cabecera de la pagina
$footer_mostrar = new header();
$header_mostrar->mostrar();

//instancia un objeto de dominio que hace una validacion cualquiera
$validacion = new validacion();
$validacion->hacer_validacion();

//un simple if para hacer una validacion cualquiera
if ($validacion == "valido") {
    
//instancia un objeto de persistencia que hace la consulta a la base de datos
    
$db = new MySQL();
    
//arma la consulta
    
$consulta $db->consulta("SELECT * FROM tabla_nueva");
    while(
$resultados $db->fetch_array($consulta)){
        echo 
"ID: ".$resultados['ID']."<br />";
    }
}

//instancia un objeto que arma el pie de la pagina
$footer_mostrar = new footer();
$header_mostrar->mostrar();
?>

Ya ejemplifique lo que queria hacer.

Por lo que ven, dentro de listado.php va instanciando objetos ubicados en las diferentes capas.

1.- Llamo al import dentro de /config/ para poder importar clases.
2.- Importo las diferentes clases que voy a usar (vale remarcar que estoy intentando hacerlo bien sencillo al ejemplo).
3.- Instancio "la cabecera" de la pagina (esto seria trabajar con la capa de presentacion)
4.- Instancio una validacion que supuestamente la aplicacion deberia hacer antes de mostrar la consulta (esto seria trabajar con la capa de dominio o logica de negocio)
5.- Dentro del if de la validacion instancio la clase que hace la consulta a la db y la ejecuto (esto seria trabajar con la capa de persistencia)
6.- A lo mismo que el punto 3, llamo al "pie" de la pagina para cerrar la estetica.


¿Esto esta bien? ¿Asi se trabaja con capas? Osea dentro de un archivo como este listado.php voy recurriendo a las diferentes capas.

Espero haber sido lo mas explicito posible a la hora de dar el ejemplo y que se entienda bien.

Muchas gracias por las respuestas.