Foros del Web » Programando para Internet » PHP »

Programación por Capas.

Estas en el tema de Programación por Capas. en el foro de PHP en Foros del Web. Buenas noches !!!! Bueno, verán, tenía interés en que algún experimentado en programación en capas con PHP me corrigiera o me confirmara mi método de ...
  #1 (permalink)  
Antiguo 24/11/2005, 13:23
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.427
Antigüedad: 14 años, 6 meses
Puntos: 7
Programación por Capas.

Buenas noches !!!!

Bueno, verán, tenía interés en que algún experimentado en programación en capas con PHP me corrigiera o me confirmara mi método de trabajo, y me digan si más o menos está bien mi forma de trabajar.

Tengo un proyecto, típico de un almacén, insertar clientes, insertar productos, etc...

Supongamos que en mi capa de presentación de clientes tengo:

insertarClientePresentacion.php
Código:
     <? require('accionesClientesNegocio.php';
     if (!$accion = 'insertar'){?>
           <formulario>
     <?}else{
          if ( insertarCliente($txtNombre, $txtApellidos, $txtNif) ){
               echo "cliente insertado";
          }else{
               echo "Algo ha fallado";
          }
     }?>

accionesClientesNegocio.php
Código:
      <?
      require('accesoBD.php');
      function insertarCliente($nombreCliente, $apellidoCliente, $nifCliente){
            $sql = "insert into tclientes(nombre, apellidos, ...)values($nombreClie...)";
             if ( bdInsertaRegistro($sql) ){
                  return true;
             }else{
                  return false;
             }
      }
      ?>


accesoBD.php
Código:
     $cn = mysql_connect(....);
     
     function bdInsertaRegistro($sentenciaSQL){
          //Para resumir 
          si inserta bien el registro: return true;
          si no inserta bien: return false
     }

En fin, ¿Qué os parece como está estructurado más o menos?, ¿Está más o menos bien esta tipología de capas?

Bueno Gracias por la ayuda ofrecida por aqui.
__________________
Charlie.
  #2 (permalink)  
Antiguo 24/11/2005, 13:45
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 14 años, 6 meses
Puntos: 3
Bueno, en realidad eso no es usar capas, no veo ningún <div>. En el fondo el motor de PHP interpreta el código de los 3 archivos como uno solo.

Sí que es una forma de programación recomendable lo que haces, y que yo por ejemplo uso.
Y gracias a esa forma de programación se trabaja mejor a la hora de usar capas: pero el uso de capas es más bien esto (hecho a grandes rasgos):

Código PHP:
<div class="cabecera">
<?php include('cabecera.php'); // o require('cabecera.php'); aunque se comportan algo diferente ?>
</div>
<div class="menu">
<?php include('menu.php');?>

</div>
<div class="cuerpo">
<?php include('cuerpo.php');?>

</div>
<div class="pie">
<?php include('pie.php');?>

</div>
Con esto y los estilos CSS puedes manejar las capas y presentarlas como gustes.
  #3 (permalink)  
Antiguo 24/11/2005, 14:23
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si te refieres a trabajo en capas a separar la lógica de la presentación por ejemplo .. mm no sé por qué usas archivos "fisico" (scripts) para indicar ahí unas funciones ..

Deberías emplear Programación Orientada a Objetos y usar alguno de los patrones y standares que fija la OOP (sería lo ideal)

Te recomiendo este mensajes al hilo:
http://www.forosdelweb.com/f68/implementar-3-capas-342921/

Y en general revisar los mensajes del foro de OOP de PHP.

Un saludo,
  #4 (permalink)  
Antiguo 25/11/2005, 09:33
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.427
Antigüedad: 14 años, 6 meses
Puntos: 7
Si Cluster, gracias, tienes razón, ya sé que debería hacerlo con Objetos todo el tema, pero a lo que me refiero es si te parece una buena estructuración como lo estoy haciendo. Lo puse sin objetos, por que lo hice sobre la marcha, pero para aclararlo mejor, lo pongo aqui como objetos, haber que opinas de la estructuración:
Nota: Si pongo algunas cosas mal de sintaxis y demás, pasarlas por alto, solo me interesa que cogais la idea para decirme que os parece la Estructuración.


insertarClientePresentacion.php
Código:
     <? require('accionesClientesNegocio.php';
     if (!$accion = 'insertar'){?>
           <formulario>
     <?}else{
          $objNegocio = new accionesClientesNegocio();
          if ( $objNegocio ->insertarCliente($txtNombre, $txtApellidos, $txtNif) ){
               echo "cliente insertado";
          }else{
               echo "Algo ha fallado";
          }
     }?>

accionesClientesNegocio.php
Código:
      <?
      require('accesoBD.php');
      require('configuracion.php');
      function accionesClientesNegocio(){
          //Inicializaría variables y demás entre ellas:
         $objCN = new accesoBD($cadenaCN); //cadenaCN es de configuracion.php
      }
      function insertarCliente($nombreCliente, $apellidoCliente, $nifCliente){
            $sql = "insert into tclientes(nombre, apellidos, ...)values($nombreClie...)";

            if ( !$objCN->conectarBD() ){
                  die('Algo fallo en la conexión a la BD');
            }

             if ( $objCN->bdInsertaRegistro($sql) ){
                  return true;
             }else{
                  return false;
             }
      }
      ?>


accesoBD.php
Código:
     private $_cadenaCN;
     funcion accesoBD($cadenaCN){
         $this->_cadenaCN = $cadenaCN;
     }
     
     function conectarBD(){
         Si Conecta devuelve return true;
         Si no Conecta, pues: return false
     }
     
     function bdInsertaRegistro($sentenciaSQL){
          //Para resumir 
          si inserta bien el registro: return true;
          si no inserta bien: return false
     }

En la capa de presentación: Muestro el HTML y hago llamadas a la capa de negocio.

En la capa de negocio: Trato los parametros recogidos O a enviar, los modifico como los tenga que modificar y los envio a la capa de accesoBD(caso de un insert) o los devuelvo a la capa de presentación para mostrarlos(caso de un select)

Capa de accesoBD: Es una clase genérica para una base de datos, asi si por ejemplo ahora uso MySQL, se basaría en MySQL, bdInsertaRegistro, bdDevuelveRegistro, bdEjecutaProcedimiento, etc... de tal forma, que si mañana se usa SqlSever, con cambiar solo esta clase, el proyecto seguiriá funcionando.

Yo CREO que asi está más o menos con una buena estructuración y separación por capas, ¿No crees Cluster?, ¿Qué te parece como tengo mi estructuración?

Nuevamente, gracias.
__________________
Charlie.

Última edición por chcma; 25/11/2005 a las 09:39
  #5 (permalink)  
Antiguo 25/11/2005, 11:21
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 16 años, 1 mes
Puntos: 68
De hecho, ya en el primer ejemplo utilizando funciones, la separación estaba más o menos bien. Que luego la hayas expresado en "formato objetos" la verdad no ha cambiado mucho. Digamos que en ambos casos, se da lo mismo: pones tres ejemplos, uno es la interfase + controlador (si fuera un MVC), en el segundo ejemplo, el Modelo y finalmente un ejemplo de acceso a bases de datos. Esto en realidad, no representa dos capas distintas, sino que son la misma realmente. Que el modelo utilice un MySQL o un archivo de Texto, lo mismo da, en realidad.

Si estás muy interesado en la separación, te recomendaría definitivamente el uso de algún motor de templates, que te permita separar más la Capa de Presentación del Controlador. El resto está bien o así mismo puede sobrevivir/evolucionar.

Saludos.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #6 (permalink)  
Antiguo 25/11/2005, 11:55
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.427
Antigüedad: 14 años, 6 meses
Puntos: 7
Si estás muy interesado en la separación, te recomendaría definitivamente el uso de algún motor de templates, que te permita separar más la Capa de Presentación del Controlador.
******************************
¿Podrías ponerme un ejemplo de motor de templates, por favor?

¿Acaso la capa de presentación no está bien separada del Controlador?, si solo llamo a la función correspondiente !!! ($objNegocio ->insertarCliente ...)
__________________
Charlie.
  #7 (permalink)  
Antiguo 25/11/2005, 13:16
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
¿Podrías ponerme un ejemplo de motor de templates, por favor?
Smaty
http://smarty.php.net

NokTemplate
http://www.jpw.com.ar/index.php?lugar=noktpl

Un saludo,
  #8 (permalink)  
Antiguo 25/11/2005, 14:39
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 16 años, 1 mes
Puntos: 68
Cita:
¿Acaso la capa de presentación no está bien separada del Controlador?, si solo llamo a la función correspondiente !!! ($objNegocio ->insertarCliente ...)
En realidad, no está nada separado, porque esa misma página (insertarClientePresentacion.php) está sirviendo tanto de Controlador como de Capa de Presentación. Está realizando un trabajo en base a un evento (un click en un link o un Post en un formulario) llamando al Modelo, y luego realiza la devolución al cliente haciendo un "echo" (o escribiendo un formulario, o haciendo lo que sea, pero devolviendo una respuesta al usuario).
Entonces, tenés dos responsabilidades en un solo archivo. Esto es lo que en Patrones de Diseño se conoce como Page Controller.

Para separar las cosas, tenés que meter mano a un diseño más orientado a MVC o comenzar a utilizar templates en tu sitio, lo cual ayudaría a mantener la capa de presentación ( la generación de HTML ) un poco más separada del Controlador (el PHP encargado de HACER algo) en tu script.

Revisá el sitio de NokTemplates que te recomendó Cluster, es un buen script, que lo realizó Juan Pablo Winiarczyk , un buen amigo mío.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #9 (permalink)  
Antiguo 25/11/2005, 15:18
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.427
Antigüedad: 14 años, 6 meses
Puntos: 7
Bien, estoy mirando lo de Templates, aun que para mi, personalmente me parece un poco confuso y complicado de mantener (No obstante, todavía estoy estudiandolo ee).

Aparte de la técnica de Templates, ¿Hay alguna otra metodología para hacer un buen uso del modelo Tres Capas?
__________________
Charlie.
  #10 (permalink)  
Antiguo 25/11/2005, 19:49
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 16 años, 1 mes
Puntos: 68
Pues podés pegarle una mirada a una breve explicación que hago del modelo MVC sobre PHP acá :

http://www.zonaphp.com/articulo50.php
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #11 (permalink)  
Antiguo 26/11/2005, 07:52
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.427
Antigüedad: 14 años, 6 meses
Puntos: 7
Si, si, muchas gracias Webstudio, ya lo había leido, la verdad que está interesante, aun que (Es una sugerencia ee) estaría mejor con un pequeño ejemplo de aplicación.

Bueno, muchas gracias, miraré lo de los templates y procuraré perfeccionar mi forma de trabajar también.

Saludos.
__________________
Charlie.
  #12 (permalink)  
Antiguo 26/11/2005, 10:56
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 16 años, 1 mes
Puntos: 68
Es una introducción para quienes YA están trabajando con MVC actualmente, pero en un próximo artículo, tengo pensado realizar pequeños scripts con ejemplos de todo. El tema es que los scripts que uno crea para realizar un tutorial, suelen ser tomados como soluciones "de facto" y son automáticamente utilizados por muchas personas que leen el artículo. Así que quiero tenerlo bien depurado y al mismo tiempo simple ( es un balance difícil de conseguir ).

Ya me ha pasado con el código para la creación de un Foro, que muchos lo han utilizado sin siquiera ponerse a pensar que solo es para explicar la idea. Si no me creen, miren esto : El foro de ZonaPHP. ¿Increible cierto?
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
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 00:35.