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

Uso de Patrones de Diseño

Estas en el tema de Uso de Patrones de Diseño en el foro de Frameworks y PHP orientado a objetos en Foros del Web. ¿Usais habitualmente patrones de diseño en vuestras aplicaciones? La unica pagina que conocia sobre el tema: phppatterns no funciona desde hace un tiempo. ¿Sabeis de ...
  #1 (permalink)  
Antiguo 03/10/2005, 13:45
 
Fecha de Ingreso: julio-2005
Mensajes: 5
Antigüedad: 18 años, 9 meses
Puntos: 0
Uso de Patrones de Diseño

¿Usais habitualmente patrones de diseño en vuestras aplicaciones?

La unica pagina que conocia sobre el tema:phppatterns no funciona desde hace un tiempo. ¿Sabeis de alguna pagina con ejemplos de patrones?

Saludos
  #2 (permalink)  
Antiguo 03/10/2005, 15:46
 
Fecha de Ingreso: septiembre-2005
Mensajes: 142
Antigüedad: 18 años, 7 meses
Puntos: 3
patrones de diseño

El problema de phppatterns al menos para mi es que muestra los patrones en la versión 4, aunque es la más extendida y usada, donde realmente se puede ver la potencia aplicada de los patrones es en php5.

ya hace un tiempo que hay un libro: "PHP 5 Objects, Patterns, and Practice."

Aunque si estás buscando alguno en particular te puedo poner el codigo del patrón.
  #3 (permalink)  
Antiguo 04/10/2005, 08:46
 
Fecha de Ingreso: septiembre-2005
Mensajes: 30
Antigüedad: 18 años, 7 meses
Puntos: 0
Hola :

Bueno, yo voy a dar mi consideracion.
El uso de patrones de disenno es en realidad una metodologia de como realizar buenas practicas de programacion; no esta limitado nunca a ningun lenguaje en especifico.
Esto no quiere decir que no existan libros o articulos hablando de patrones y su implementacion en PHP, pero insisto, que los patrones que existen son mas bien genericos y representan metodologias de como programar ( a grandes rasgos, no estoy definiendo que cosa es un patron de disenno claro esta ).

Ahora, el uso de los patrones ( que existen muchisimos, he revisado mas de 40 patrones que son bastante utilizados ) en PHP depende del programador y si deberia ser bastante utilizado.

Voy a poner un ejemplo, el patron Singleton y el uso de Factorys se utiliza bastante, aunque no sea demasiado beneficioso para el caso del PHP4 por su propio manejo de clases, pero si se utiliza y aporta mucha flexibilidad y claridad al codigo.

Hay patrones de Acceso a Componentes de Datos ( DAC, similar al manejo que da .NET a este tema ) que al menos yo utilizo 100% de las veces que necesito interactuar con una DB y siempre me resulta muy util, como ademas le aporta flexibilidad, claridad entre otras al codigo, aqui envio un ejemplo:

Factory & DAC :

-> IDACNews [ Esto representa un tipo o interface en el modelo, como en PHP4 no existen tipos o interfaces es algo simblico pero la clase correspondiente presenta estos metodos como significado de implementacion del tipo IDACNews ]
. create ( news )
. read ( news_id )
. get_all_news()
. delete( news_id )

-> Similar para Users y Admins

Código PHP:
    class DAC
    
{
        var 
$db;
        
        function &
create$name$dac_type="mysql" )
        {
          if (
$dac_type == "mysql") {
            switch ( 
$name )
            {
                case 
"news"       : return new MySQLNews(); break;
                case 
"users"      : return new MySQLUsers(); break;
                case 
"admins"     : return new MySQLAdmins(); break;
                ......
                ......
                default           : return 
null; break;
            }             
          }    
          if (
$dac_type == "ws") {
            switch ( 
$name )
            {
                case 
"news"       : return new WSNews(); break;
                case 
"users"      : return new WSUsers(); break;
                case 
"admins"     : return new WSAdmins(); break;
                .....
                .....
                default           : return 
null; break;
            }             
          }    
        }    
    }    

    class 
MySQLNews extends MySQLDAC   //implements IDACNews
    
{
        function 
create$news )
        {
            
$sql =  sprintf"INSERT INTO news ( 0, %s )"$news );
            return 
$this->db->execute_non_query $sqltrue );                }
    
        function 
read$id )
        {
            
$sql "SELECT * FROM news WHERE news_id = %s";
            return 
$this->db->execute_querysprintf$sql$id ) );
        }
        
        function 
get_all_news() {
            
$sql "SELECT * from news";
            return 
$this->db->execute_readersprintf$sql ) );            
        }
        
        function 
delete$id )
        {
            
$sql "DELETE FROM news WHERE news_id = %s";
            
$this->db->execute_non_querysprintf$sql$id ) );            
        }
    
        function 
MySQLNews(){ parent::MySQLDAC(); }
    } 
.. Similar para Users y Admins

Espero que les haya sido util.

Saludos
__________________
Alojamiento Web - Alojamiento web y Servidores dedicados. Servidores en USA y Londres.
Hosting,PHP,Java,CSS,SEO BLOG - Web Hosting, Posicionamiento Web, Programacion en PHP, Java, CSS y mucho mas.
  #4 (permalink)  
Antiguo 03/11/2005, 15:39
 
Fecha de Ingreso: mayo-2005
Mensajes: 201
Antigüedad: 18 años, 11 meses
Puntos: 2
Erich Gamma y compañia en su libro patrones de diseño ponen la siguiente definicion de Christopher Alenxander :
"Cada patron de diseño describe un problema que ocurre una y otra vez en nuestro entorno, así como la solución a ese problema, de tal modo que se puede aplicar esta solucion un millon de veces, sin hacer lo mismo dos veces"

Los patrones son soluciones a problemas comunes en el diseño de aplicaciones y es buena constumbre implementarlos en tus aplicaciones, ya qie te ahorran tiempo y mejoran tu aplicacion en varios aspectos que no mensionare pero que puedes consultar en la documentacion correspondiente y bueno como comenta Javier_enithost hay una gran variedad de patrones, y su concepcion es independiente del lenguaje de programacion asi que lo que te puedo recomendar es que busques articulos o algunos libros que hablen sobre el tema y que comprendas que problemas solucionan y como, cada patron de diseño para que puedas implementarlos no solo en php si no en cualquier lenguaje que soporte POO.
__________________
Saludos!
Mty-NL..
  #5 (permalink)  
Antiguo 05/11/2005, 18:07
 
Fecha de Ingreso: diciembre-2002
Mensajes: 473
Antigüedad: 21 años, 4 meses
Puntos: 0
Javier, muy buena la clase, ahora bien, yo no se bien sobre el patron factory, hay algun tipo de especificación sobre este patron y tu adaptaste ese mapa o esquema a esa clase?.En que se diferencia de otros? Como usas esas clases?
Saludos y gracias!
  #6 (permalink)  
Antiguo 11/11/2005, 13:03
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 22 años, 5 meses
Puntos: 69
Hola gente...
un consejo que he aprendido con los años, y que posiblemente les ahorre muchos dolores de cabeza en el futuro:

"adapten el patrón de diseño al problema, y no el problema al patrón de diseño".

Esto es porque muchas veces, la gente quiere aplicar los patrones per se, cuando en realidad, lo primero es solucionar un problema computacional, y luego ver de hacerlo de una manera más purista.

Saludos y nos estaremos leyendo de nuevo.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #7 (permalink)  
Antiguo 13/11/2005, 11:03
 
Fecha de Ingreso: septiembre-2005
Mensajes: 30
Antigüedad: 18 años, 7 meses
Puntos: 0
Hola :

Bueno, el patron se llama Singleton y es para tener una sola instancia de una clase determinada;
yo utilizo esto en la capa de datos de cada aplicacion que hago:

1. La clase DAC me permite encapsular la fuente de datos y el gestor de DB:
. Puedo usar mysql o postgre o oracle, la que desee
. Puedo obtener los datos de un gestor o propianmente de un webservice o de cualquier fuente
2. Defino un tipo por cada entidad de la capa de datos:
. IDACUsers
. IDACNews
-> create
-> delete
-> get_all_news
. IDACAdmin
. xxxxx

3. Creo una clase que especifica un gestor determinado e implementa el tipo que deseo:
. MySqlNews hereda de MySQLDAC e implementa IDACNews
. PgSqlNews hereda de PgSQLDAC e implementa igualmente IDACNews

eso me permite que yo reciba una instancia que tenga los metodos create, delete, get_all_news
sin interesarme el gestor en que esta soportada.

4. Para tomar una instancia de ese tipo solo llamo al singleton:
Código PHP:
   $dac_news DAC::create"news" );
   
$lista_de_news $dac_news->get_all_news(); 
Ya con eso tengo todas las noticias, y hago analogamente con cada entidad del modelo de la capa de datos.

Saludos
__________________
Alojamiento Web - Alojamiento web y Servidores dedicados. Servidores en USA y Londres.
Hosting,PHP,Java,CSS,SEO BLOG - Web Hosting, Posicionamiento Web, Programacion en PHP, Java, CSS y mucho mas.
  #8 (permalink)  
Antiguo 01/03/2006, 14:54
 
Fecha de Ingreso: junio-2004
Mensajes: 60
Antigüedad: 19 años, 10 meses
Puntos: 1
Hola a todos. Javier, donde podria conseguir mas información sobre el IDACNews, o algunos ejemplos para administrar contenidos, utilizando POO.
Muchas gracias.

Al3jo
  #9 (permalink)  
Antiguo 01/03/2006, 17:59
 
Fecha de Ingreso: febrero-2001
Mensajes: 1.374
Antigüedad: 23 años, 2 meses
Puntos: 11
Algo importante, no usen patrones de disenio, ni fabricas abandonadas, ni nada raro para desarrollar un simple y miserable sitio web. Mantengan el buen sentido comun y en lo posible las cosas simples.
  #10 (permalink)  
Antiguo 02/03/2006, 15:53
Nok
 
Fecha de Ingreso: abril-2001
Mensajes: 302
Antigüedad: 23 años
Puntos: 0
En sintesis...

Los design patterns hay que usarlos cuando:
Se conoce con profundidad la teoria
Se cae de maduro qeu se puede solucionar con un patron / ajustes mas, ajustes menos.
Se justifica aplicarlo. Digamos que si para hacer un form2mail, hay que crear 5 clases..... no se justifica.
Si no estan claros esos requisitos, mejor hacerlo de la manera tradicional.

Saludos.
Pablo.
__________________
La casa de Noktemplate.
Zonaphp.com - Php en español.

¿Que esperas de NokTpl 2? Deja tu comentario.

Blog
Mas o menos asi .
  #11 (permalink)  
Antiguo 08/06/2007, 13:55
Avatar de moron  
Fecha de Ingreso: mayo-2004
Mensajes: 972
Antigüedad: 19 años, 11 meses
Puntos: 2
Re: Uso de Patrones de Diseño

En donde se consigue esa clase DAC?, en el google no encontré nada.
saludos
  #12 (permalink)  
Antiguo 08/06/2007, 14:25
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Uso de Patrones de Diseño

Esta publicada en el POST #3

Aunque parece que es una solucion ESPECIFICA a su problema asi que mejor pon la duda que tienes.

Saludos.
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 17:04.