Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Consulta programacion en capas

Estas en el tema de Consulta programacion en capas en el foro de Frameworks y PHP orientado a objetos en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 02/05/2010, 10:36
 
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.
  #2 (permalink)  
Antiguo 02/05/2010, 14:06
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Respuesta: Consulta programacion en capas

Mmm... no, eso no es trabajar en una arquitectura de capas, sí estás usando "capas" pero de forma desordenada.

Por eso es importante aprender UML y a diseñar antes en un diagrama las clases y sus relaciones, así, puedes visualizar fácilmente los errores que estás cometiendo en las dependencias.

La idea de que un sistema debe tener como mínimo 3 capas, no significa que puedas comunicarte con cada capa en cualquier momento, sino, que accedas a la capa correspondiente en un orden y que no puedas acceder a otra sin respetar ese orden, por lo general, saltando de capa en capa, entre capas.

Imagina el modelo OSI, eso es una arquitectura de capas (más de 3).

¿queda más claro?
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #3 (permalink)  
Antiguo 02/05/2010, 16:52
 
Fecha de Ingreso: mayo-2010
Mensajes: 4
Antigüedad: 14 años
Puntos: 0
Respuesta: Consulta programacion en capas

Si, creo que voy entendiendo.

Osea, por lo que comentas es digamos "ley" de protocolo tener un orden especifico pasando por las capas.

Seria obligatoriamente pasar:

presentacion->logica de negocio->persistencia->presentacion

¿Estoy en lo correcto?

Si es asi, volviendo al ejemplo que di... ¿como seria un desarrollo bien hecho?
Por lo visto la idea es desarrollar en diferentes archivos y no lo que yo hice que fue ubicar ciertos scripts dependiendo de lo que realizan en "diferentes capas" y llamarlos en el archivo.

Entonces, a ver si esta vez voy mas acertado.

Tengo 3 archivos
listado.php que pertenece a la capa de presentacion
desarrollo.php que pertenece a la capa de logica
consulta.php que pertenece a la capa de persistencia

La idea que por ejemplo listado.php sea una pagina que tiene un boton: Mostrar Listado.
Cuando se apreta va a desarrollo.php, ahi "resuelve algo" y de ahi va a consulta.php.
Ahora consulta devolveria un objeto de tipo listado a listado.php que lo mostraria.

¿Es asi?

Igualmente me tomo como tarea aprender mas de UML, que tengo un concepto algo vago sobre eso.

Ahora bien, lo que me gustaria en lo posible es un ejemplo de como programar en 3 capas (digo 3 por que pareciera que es lo mas basico). Estuve buscando y no pude encontrar codigos funcionando que sean simples sobre esto.

Si pudieran hacerme el favor de publicar algo sencillo, como el ejemplo que aqui postulo. Una pagina con un simple boton de consulta a la base de datos que de un listado de X cosas; se los agradeceria infinitamente.

Por otra parte, si alguien tiene un link de un tutorial de programacion en capas para PHP se los agradezco.

Saludos.-
  #4 (permalink)  
Antiguo 02/05/2010, 18:16
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Respuesta: Consulta programacion en capas

Estimado, la verdad que aprender en base a "prueba y error" no es mi fuerte, prefiero que te fundamentes antes.

No sé cómo buscaste, pero simplemente colocando "3 capas php" en Google aparecen varios artículos, una entrada en foros donde pongo un ejemplo en código y luego varios artículos de mi autoría.

Reinventar la rueda, otra vez, no gracias

Lee y luego consulta las dudas puntuales.

Saludos!
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #5 (permalink)  
Antiguo 03/05/2010, 04:42
 
Fecha de Ingreso: mayo-2010
Mensajes: 4
Antigüedad: 14 años
Puntos: 0
Respuesta: Consulta programacion en capas

Cita:
Iniciado por enriqueplace Ver Mensaje
Estimado, la verdad que aprender en base a "prueba y error" no es mi fuerte, prefiero que te fundamentes antes.

No sé cómo buscaste, pero[URL="http://www.google.com.ar/search?q=3+capas+php&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:es-AR:official&client=firefox-a"] simplemente colocando "3 capas php" en Google[/URL] aparecen varios artículos, una entrada en foros donde pongo un ejemplo en código y luego varios artículos de mi autoría.

Reinventar la rueda, otra vez, no gracias

Lee y luego consulta las dudas puntuales.

Saludos!
Sobre leer y aprender, es exactamente lo que voy a hacer proximamente.

Lo de google, evidentemente fallo la busqueda, es lo que odio de google, si uno intenta ser un poco mas especifico para que no le salgan resultados que no desea, muchas veces tambien se lleva las cosas utiles.
Estuve viendo el blog que sale en la busqueda con el ejemplo que trae y todo. Me parecio muy interesante.

Despues de aprender a fondo UML voy a seguir con eso y como dices, voy a centrarme luego en las preguntas mas puntuales para pulir mas en detalle el tema.

Muchas gracias.

------

Tambien aprovecho el tema para buscar una pequeña "guia" de ustedes.
Como toda lo que hago es "autodidacta" y las lecturas son tomadas de internet, si alguien tiene algunos links o sugerencias de que me convendria leer para evitar, como ya me ha sucedido, lecturas erroneas; es muy bienvenido. Actualmente estoy en busca de, obviamente, tutoriales de UML, y tambien de POO en PHP5.

Me ha sucedido que, como resulta en este caso particular, hay cosas que no sabia que existian o que le restaba importancia (UML) y que evidentemente tienen una importancia muy grande.
Comence programando con PHP4 de forma estructural, practicamente desconocia la existencia de la POO hasta que comence a aprender algo de Java y ni hablar de programacion en capas, etc.
Si tienen tambien alguna sugerencia sobre estos marcos teoricos de los cuales deberia aprender y podria ir aconcejandome "los pasos a seguir", me seria muy provechoso. Igualmente supongo que a medida que vaya aprendiendo mas de todo esto y que surgan las dudas me indicaran que lecturas realizar.

Nuevamente gracias por las respuestas y a los que han leido.
  #6 (permalink)  
Antiguo 04/05/2010, 14:19
atrianaster
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Consulta programacion en capas

Cuando trabajamos sobre aplicaciones web uno de los estilos arquitectónicos utilizado es el estilo Capas. En este estilo pueden utilizarse varias variantes, con 2 capas, 3 capas y hasta n capas, siendo el más común el de 3 capas.

La capa de presentación es la encargada de interactuar con el usuario y se corresponde con lo que tradicionalmente se conoce como interfaz de usuario.

En la capa de aplicación o intermedia es donde se localiza la lógica del negocio. Esta capa recibe la petición del usuario a través de la capa de presentación y se encarga de darle curso, recurriendo normalmente a los repositorios de información, dicha capa es donde se implementan las reglas del negocio, las validaciones y cálculos.

La capa de acceso a datos es la encargada de acceder a los repositorios de información, ejemplo de estas bases de datos.

Como se muestra en la figura la relación entre las capas es unidireccional, es decir solo las capas superiores pueden utilizar los servicios que brindan las capas inferiores, aunque los subsistemas que se encuentran en la misma capa si pueden interactuar entre si.

  #7 (permalink)  
Antiguo 05/05/2010, 06:55
 
Fecha de Ingreso: mayo-2010
Mensajes: 4
Antigüedad: 14 años
Puntos: 0
Respuesta: Consulta programacion en capas

Cita:
Iniciado por atrianaster Ver Mensaje
Cuando trabajamos sobre aplicaciones web uno de los estilos arquitectónicos utilizado es el estilo Capas. En este estilo pueden utilizarse varias variantes, con 2 capas, 3 capas y hasta n capas, siendo el más común el de 3 capas.

La capa de presentación es la encargada de interactuar con el usuario y se corresponde con lo que tradicionalmente se conoce como interfaz de usuario.

En la capa de aplicación o intermedia es donde se localiza la lógica del negocio. Esta capa recibe la petición del usuario a través de la capa de presentación y se encarga de darle curso, recurriendo normalmente a los repositorios de información, dicha capa es donde se implementan las reglas del negocio, las validaciones y cálculos.

La capa de acceso a datos es la encargada de acceder a los repositorios de información, ejemplo de estas bases de datos.

Como se muestra en la figura la relación entre las capas es unidireccional, es decir solo las capas superiores pueden utilizar los servicios que brindan las capas inferiores, aunque los subsistemas que se encuentran en la misma capa si pueden interactuar entre si.

Te agradezco la respuesta.

Ya entendi mucha mas de la teoria de programar en N capas. El problema ahora lo tengo a la hora de implementacion.

Todavia no pude encontrar un buen ejemplo sencillo y explicito de como realizar el desarrollo.


Osea, todos hablan de index.php-->presentacion-->logica-->persistencia

El tema es que no encuentro un codigo de esto, no comprendo si lo hacen mediante includes o si van saltando de una pagina a la otra.

Hay muchisima documentacion de teoria pero de practica todavia no he encontrado, no se si es problema mio a la hora de buscar en los buscadores de internet, pero he visto que hay muchisima gente en el mismo estado que yo.

Yo lo que simplemente estoy buscando seria un ejemplo sencillo como el que plantie arriba. Una consulta a una base de datos hecha en 3 capas. Si viera el codigo+la documentacion que ya revise supongo que terminaria de entenderlo.
En todos los foros, blogs y paginas que he visto hablan de marcos teoricos y nadie lo desarrolla.

Por ejemplo, unas preguntas puntuales.

Teniendo el mismo esquema de directorios que plantie en el primer post.

Código:
index.php
/aplicacion/dominio/
/aplicacion/persistencia/
/aplicacion/presentacion/
/config/
1.- El index.php que hace? invoca a la configuracion de la aplicacion (sea constantes,etc.) y luego trae mediante un include dentro de presentacion a "la pagina para mostrar"? ¿O redirecciona a un archivo, llamemosle mostrar.php, dentro de la carpeta presentacion?

2.- Manteniendo el protocolo de que debe haber un orden al pasar por las capas. Digamos que ya se como publicar la capa de presentacion. Si quiero hacer una consulta bien sencilla. Si nada de nada entre medio, osea, link->va a una pagina que muestra un listado. ¿Que desarrollo se hace en la capa de logica y que desarrollo en la capa de persistencia? No termino de comprender si la consulta es parte de la logica y al objeto que instancia es parte de la persistencia.

3.- Otra cosa que no comprendo es si dentro de las separaciones fisicas (directorios) solo se incluyen las clases. Y Luego se desarrolla la aplicacion en el directorio raiz como si fuera programacion estructurada y se van instanciando objetos de cada capa.
Digamos que en el raiz tengo el index.php que muestra la pagina de presentacion con un link a la pagina (tambien en raiz) listar.php y este ultimo archivo instancia los objetos necesarios (de cada capa) para mostrar un listado dentro de una base de datos.


Por lo que verán, mis dudas van mas apuntadas al desarrollo que a la teoria. Entiendo perfectamente los motivos para implementar el concepto de N capas en un desarrollo. Entiendo la finalidad de la reutilizacion del codigo. Lo que estoy necesitando ahora es un ejemplo bien pero bien sencillo de toda esta teoria aplicado a php.

Última edición por Edanoir; 05/05/2010 a las 08:57

Etiquetas: capas, programacion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:21.