Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

44
Patrones de diseño y Orientación a Objetos en PHP5 Patrones de diseño y Orientación a Objetos en PHP5 ¡ Desarrollo Desarrollo rápido rápido de de aplicaciones aplicaciones!

description

Este manual es sobre la ponencia de "Patrones de diseño y Orientación a Objetos en PHP5", la cual toca los siguientes temas: Definiciones básicas sobre los siguientes términos: Desarrollo de software, Diseño y Desarrollo Aplicación Web, Tecnología involucrada, Funcionamiento básico, Proyecciones de la Web, Factibilidad para el desarrollo de aplicación. Luego se habla sobre PHP, seguidamente se introduce a PHP5 y sus características de programación Orientación a Objetos. Además se demuestran las nociones básicas de los Patrones de diseños, sus usos, sus ideas básicas para el desarrollo de aplicaciones, clasificaciones, MVC (Model View Controller) aplicándolo en cada una de las capas los patrones de diseño y desarrollo mas comunes con PHP5. Luego se describe el uso de patrones de diseño en la vida real, es decir con usos prácticos, se explica un ejemplo Desglosado del patrón Memento. Siguiendo de con las buenas practicas lo llevamos "De lo horrible a lo practico" dando una guia hacia el Camino MVC en 10 pasos, luego explicamos los Framework, mostramos una tabla comparativa de dichas herramientas en PHP. Y para concluir se demostrara un caso de uso con el Framework de desarrollo Tomates desarrollo hecho en Venezuela, como anexo se dejan las referencias electrónicas de Sitios de Internet.

Transcript of Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Page 1: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

Page 2: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

LicenciaLicencia

Copyright (c)  2006  Anibal RojasCopyright (c)  2006  Anibal Rojas

Copyright (c)  2004­2006  Ernesto Hernández­Novich.Copyright (c)  2004­2006  Ernesto Hernández­Novich.

Modificaciones y adaptaciones. Modificaciones y adaptaciones. 

Copyright (c)  2006, 2007  Leonardo Caballero / Jesús Lara.Copyright (c)  2006, 2007  Leonardo Caballero / Jesús Lara.

Permission  is  granted  to  copy,  distribute  and/or  modify  this Permission  is  granted  to  copy,  distribute  and/or  modify  this 

document  under  the  terms  of  the  GNU  Free  Documentation document  under  the  terms  of  the  GNU  Free  Documentation 

License,  Version  1.2  or  any  later  version  published  by  the  Free License,  Version  1.2  or  any  later  version  published  by  the  Free 

Software Foundation; with no Invariant Sections, no Front­Cover Software Foundation; with no Invariant Sections, no Front­Cover 

Texts, and no Back­Cover Texts.  A copy of the license is included Texts, and no Back­Cover Texts.  A copy of the license is included 

in the section entitled "GNU Free Documentation License".in the section entitled "GNU Free Documentation License".

Page 3: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

GNU Free Documentation LicenseGNU Free Documentation License

Puede obtener una copia de la licencia "GNU Free Documentation Puede obtener una copia de la licencia "GNU Free Documentation 

License"  en  los  ficheros  llamados  "copyright.txt"  en  ingles, License"  en  los  ficheros  llamados  "copyright.txt"  en  ingles, 

"copyright.es.txt" en español o en los siguientes "copyright.es.txt" en español o en los siguientes ssitiositios en Internet en Internet::

• http://www.gnu.org/copyleft/fdl.htmlhttp://www.gnu.org/copyleft/fdl.html

• http://www.fsf.org/licensing/licenses/fdl.htmlhttp://www.fsf.org/licensing/licenses/fdl.html

Page 4: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

Definiciones básicasDefiniciones básicas

Estas definiciones son más importante de lo que parece. Estas definiciones son más importante de lo que parece. 

• Desarrollo de software.Desarrollo de software.

• Diseño Web.Diseño Web.

• Desarrollo Web.Desarrollo Web.

• Aplicación Web.Aplicación Web.

Page 5: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

Tecnologías involucradas en la Web.Tecnologías involucradas en la Web.

Page 6: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

Funcionamiento básico de una Aplicación Web.Funcionamiento básico de una Aplicación Web.

1)1) El usuario abre un URL.El usuario abre un URL.

2)2) Llena un formulario.Llena un formulario.

3)3) Oprime alguno de los botones.Oprime alguno de los botones.

4)4) La aplicación genera un nuevo formulario con resultados.La aplicación genera un nuevo formulario con resultados.

Desde el punto de vista del Usuario:Desde el punto de vista del Usuario:

Page 7: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

Funcionamiento básico de una Aplicación Web :: Continuación.Funcionamiento básico de una Aplicación Web :: Continuación.

Solicita un Documento

Es un documento .php

La página se ejecuta y cambia código HTML

La página HTML se envía al cliente

Page 8: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

Funcionamiento básico de una Aplicación Web :: Continuación.Funcionamiento básico de una Aplicación Web :: Continuación.

Interfase del servidor

Compila

Ejecuta

Base de Datos

Motor Zend

Módulo de Funciones

ODBC

1 2

4

3

5

 6

Page 9: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

Proyecciones de la Web.Proyecciones de la Web.

Page 10: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

Factibilidad para el desarrollo de Aplicaciones Web.Factibilidad para el desarrollo de Aplicaciones Web.

• ¿Cuánto cuesta encontrar un programador que sepa todo eso?¿Cuánto cuesta encontrar un programador que sepa todo eso?

• ¿Cuánto cuesta mantener toda esta mezcla de multilenguaje?¿Cuánto cuesta mantener toda esta mezcla de multilenguaje?

• ¿En cuanto tiempo puede ofrecer al cliente un prototipo de la aplicación?¿En cuanto tiempo puede ofrecer al cliente un prototipo de la aplicación?

• ¿Cuanto tiempo necesita para cambiar toda la interfaz de usuario de la aplicación ¿Cuanto tiempo necesita para cambiar toda la interfaz de usuario de la aplicación 

a las necesidades del cliente?a las necesidades del cliente?

• ¿Puede garantizar  que  la  aplicación cumpla  con  los  estándares y normativas de ¿Puede garantizar  que  la  aplicación cumpla  con  los  estándares y normativas de 

accesibilidad, reusabilidad y operatividad de la Web?accesibilidad, reusabilidad y operatividad de la Web?

¡Si no sabes responder a estas preguntas con respuestas a tiempos ¡Si no sabes responder a estas preguntas con respuestas a tiempos 

cortos, prácticos y razonables, ya entiendes el gran problema!cortos, prácticos y razonables, ya entiendes el gran problema!

Page 11: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

Hablemos de PHP.Hablemos de PHP.

• Originalmente PHP fue siglas de Personal Home Page Tools.               Originalmente PHP fue siglas de Personal Home Page Tools.               

• Creado en 1995 por Rasmu Lerdorf.         Creado en 1995 por Rasmu Lerdorf.         

• Año 1997, cambios significativos.     Año 1997, cambios significativos.     

• Al redefinirse el motor recibió las siglas del acrónimo Hypertext Pre Processor                   Al redefinirse el motor recibió las siglas del acrónimo Hypertext Pre Processor                   

• PHP 3, creado por Andi Gutmans y Zeev Zuraski.               PHP 3, creado por Andi Gutmans y Zeev Zuraski.               

• Motor Zend. Motor Zend. 

• PHP 4 (año 2000).     PHP 4 (año 2000).     

• PHP 5 (año 2004).     PHP 5 (año 2004).     

• Está previsto el lanzamiento en breve de la rama 6 de PHP.                     Está previsto el lanzamiento en breve de la rama 6 de PHP.                     

• PHP 4 perderá su estado de estable el 31 de diciembre del 2007.PHP 4 perderá su estado de estable el 31 de diciembre del 2007.

Page 12: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

Introducción a PHP5.Introducción a PHP5.

• Soporte sólido para Programación Orientada a Objetos (o OOP) con PHP.Soporte sólido para Programación Orientada a Objetos (o OOP) con PHP.

• Data Objects. Data Objects. 

• Mejoras de rendimiento.   Mejoras de rendimiento.   

• Mejor soporte para MySQL con extensión de rewrite completa.               Mejor soporte para MySQL con extensión de rewrite completa.               

• Mejor soporte a XML (XPath, DOM, entre otros).         Mejor soporte a XML (XPath, DOM, entre otros).         

• Soporte nativo para SQLite.     Soporte nativo para SQLite.     

• Soporte integrado para SOAP.     Soporte integrado para SOAP.     

• Iteradores de datos.   Iteradores de datos.   

• Excepciones de errores.   Excepciones de errores.   

Page 13: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

PHP5 y Programación Orientación a Objetos.PHP5 y Programación Orientación a Objetos.

PHP5 soporta una gran cantidad de funcionalidades para OOP.PHP5 soporta una gran cantidad de funcionalidades para OOP.

• Métodos constructores y destructores.Métodos constructores y destructores.

• Métodos setter y getter.Métodos setter y getter.

• Métodos mágicos.Métodos mágicos.

• Clases, objetos y variables estáticas, privadas y protegidas.Clases, objetos y variables estáticas, privadas y protegidas.

• Clases abstractas.Clases abstractas.

• Interfaces.Interfaces.

• Abstracción de datos.Abstracción de datos.

• Standard PHP Library (SPL).Standard PHP Library (SPL).

• Clases extendidas, excepciones, iteradores.Clases extendidas, excepciones, iteradores.

Page 14: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

Patrones de diseño.Patrones de diseño.

Los patrones son simples soluciones a problemas recurrentes que ocurren una y otra Los patrones son simples soluciones a problemas recurrentes que ocurren una y otra vez en nuestro entorno.vez en nuestro entorno.

Luego de llegar a la solución, encapsulamos todas las variables y factores para llegar Luego de llegar a la solución, encapsulamos todas las variables y factores para llegar a la solución y disponemos de una “receta” para resolver mil veces el problema sin a la solución y disponemos de una “receta” para resolver mil veces el problema sin tener que “reinventar la rueda”.tener que “reinventar la rueda”.

Los  desarrolladores  los  usan  como  una  forma  de  reutilizar  la  experiencia, Los  desarrolladores  los  usan  como  una  forma  de  reutilizar  la  experiencia, clasificando  las  soluciones  bajo  “términos”  de  común  denominación  ¿Un clasificando  las  soluciones  bajo  “términos”  de  común  denominación  ¿Un diccionario?, eso lo haces con un singleton+registry pattern.diccionario?, eso lo haces con un singleton+registry pattern.

Causando además, un idioma común entre programadores de distintos lenguajes.Causando además, un idioma común entre programadores de distintos lenguajes.

Uno de los principales precursores del movimiento acerca de los Design Patterns fue Martin Fowler.

Page 15: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

● Interfaz gráfica.

● Optimización de Código.

● Reutilización de componentes.

● Simplicidad de las soluciones.

En el área de patrones de diseño hablamos de solventar problemas de:

Patrones de diseño :: Continuación.Patrones de diseño :: Continuación.

Page 16: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

Uso de los patrones de diseño.Uso de los patrones de diseño.

Los patrones de diseño nos permiten: Los patrones de diseño nos permiten: 

• Extensibilidad.Extensibilidad.

• Flexibilidad.Flexibilidad.

• Concurrencia.Concurrencia.

• Organización.Organización.

• Soluciones ya probadas y efectivas.Soluciones ya probadas y efectivas.

• Mayor facilidad para hacer cambios.Mayor facilidad para hacer cambios.

• Reutilización.Reutilización.

• Refactorización.Refactorización.

• Idioma común de intercambio de soluciones.Idioma común de intercambio de soluciones.

• Buenas prácticas en el desarrollo de Software.Buenas prácticas en el desarrollo de Software.

Page 17: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

● Encapsulemos la lógica de la aplicación de tal manera que sea innecesario pensar a bajo nivel.(¿Tendré que escribir una función que haga eso?)

● Desviarse de la lógica de mi aplicación.(¿Para implementar AJAX debo usar otra cosa?)

● Preocuparse únicamente por la “operatividad de la aplicación” (¿Funcionará esa implementación de roles y seguridad que me “inventé”?).

● Lograr una flexibilidad sin límites(¿Funcionará ese objeto en otro proyecto futuro?).

Lo que se logra en toda aplicación, al implementar patrones es que, en conjunto con la programación Orientada a Objetos (OOP):

Ideas básicas en el desarrollo de aplicaciones.Ideas básicas en el desarrollo de aplicaciones.

Page 18: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

Clasificación de los patrones de diseño.Clasificación de los patrones de diseño.

De creación:De creación:

Como se crean instancias de los objetos y/o como se implementan.Como se crean instancias de los objetos y/o como se implementan.

• Singleton, Multiton, Facade.Singleton, Multiton, Facade.

Estructurales:Estructurales:

Como se relacionan y combinan las clases para crear nuevas estructuras.Como se relacionan y combinan las clases para crear nuevas estructuras.

• Abtract Factory, Visitor, Facade, Flyweight, Adapter.Abtract Factory, Visitor, Facade, Flyweight, Adapter.

De comportamiento:De comportamiento:

Como interactúan y cooperan las clases.Como interactúan y cooperan las clases.

• Decorator, Memento, Chain of Responsability, Flyweight, Adapter.Decorator, Memento, Chain of Responsability, Flyweight, Adapter.

Page 19: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

Clasificación de los patrones de diseño :: Continuación.Clasificación de los patrones de diseño :: Continuación.

De ámbito:De ámbito:

De Como se utilizan dinámicamente los Objetos.De Como se utilizan dinámicamente los Objetos.

• Delegator, Observer, Interpreter, Visitor.Delegator, Observer, Interpreter, Visitor.

De operaciónDe operación

De como se comportará la aplicación.De como se comportará la aplicación.

• Business Logic, Proxy Adapter, Front Controller, Model­View Controller.Business Logic, Proxy Adapter, Front Controller, Model­View Controller.

Page 20: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

MVC (Model view controller).MVC (Model view controller).

1)1) Patrón de diseño orientado a objetos.Patrón de diseño orientado a objetos.

2)2) Describe  cualquier  aplicación  con  interacción  humana  y  es  particularmente Describe  cualquier  aplicación  con  interacción  humana  y  es  particularmente 

adecuado para aplicaciones Web.adecuado para aplicaciones Web.

3)3) Separa clara y consistentemente las "preocupaciones":Separa clara y consistentemente las "preocupaciones":

1)1) Modelo (Model) ­ Interacción con la base de datos.Modelo (Model) ­ Interacción con la base de datos.

2)2) Vista (View) ­ Presentación de la información al usuario.Vista (View) ­ Presentación de la información al usuario.

3)3) Controlador (Controller) ­ Flujo de información y procesos.Controlador (Controller) ­ Flujo de información y procesos.

Si su aplicación no está diseñada siguiendo MVC, inevitablemente tendrá problemas Si su aplicación no está diseñada siguiendo MVC, inevitablemente tendrá problemas 

de escalabilidad, de mantenimiento y de extensión.de escalabilidad, de mantenimiento y de extensión.

Page 21: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

MVC (Model view controller) :: Continuación.MVC (Model view controller) :: Continuación.

• Permite múltiples representaciones (vistas) de la misma información (modelo).Permite múltiples representaciones (vistas) de la misma información (modelo).

• De  forma  muy  fácil  permite  agregar,  remover  o  cambiar  interfaces  de  usuarios De  forma  muy  fácil  permite  agregar,  remover  o  cambiar  interfaces  de  usuarios 

(vistas).(vistas).

• Permite  responder  a  lo  ingresado  por  el  usuario  (controladora)  para  ser Permite  responder  a  lo  ingresado  por  el  usuario  (controladora)  para  ser 

fácilmente cambiando.fácilmente cambiando.

• Permite que múltiples desarrollos simultáneamente actualiza la interfaz, la lógica Permite que múltiples desarrollos simultáneamente actualiza la interfaz, la lógica 

de negocios o introducir un aplicación nueva sin afectar a otros código fuentes.de negocios o introducir un aplicación nueva sin afectar a otros código fuentes.

• Los cambios pueden suceder dinámicamente en la ejecución de la aplicación.Los cambios pueden suceder dinámicamente en la ejecución de la aplicación.

• Promete reducir código (ej.  “una vista puede ser usada con diferentes modelos”).Promete reducir código (ej.  “una vista puede ser usada con diferentes modelos”).

• Ayuda a enfocar a los desarrolladores en un solo simple aspecto de la aplicación Ayuda a enfocar a los desarrolladores en un solo simple aspecto de la aplicación 

al mismo tiempo.al mismo tiempo.

Page 22: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

MVC con PHP5.MVC con PHP5.

Page 23: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

MVC con PHP5 :: Continuación.MVC con PHP5 :: Continuación.

1)1) Solicitud: El usuario ejecuta un Solicitud: El usuario ejecuta un NavegadorNavegador, pide un URL solicitando a la , pide un URL solicitando a la AplicaciónAplicación..

2)2) Despacha: La Despacha: La AplicaciónAplicación delega a la capa  delega a la capa ControladoraControladora la petición del usuario desde  la petición del usuario desde 

el el NavegadorNavegador..

3)3) Almacena: Consulta en la capa Almacena: Consulta en la capa ModeloModelo por medio a la capa de  por medio a la capa de DatosDatos del manejador  del manejador 

de base de datos existente.de base de datos existente.

4)4) Devuelve: La capa de Devuelve: La capa de DatosDatos devuelve los resultados en “data pura” a la capa  devuelve los resultados en “data pura” a la capa 

ControladoraControladora..

5)5) Genera: La capa Genera: La capa ControladoraControladora genera la capa de  genera la capa de VistaVista en base a los tipos de datos  en base a los tipos de datos 

generados por la capa de generados por la capa de DatosDatos..

6)6) Responde: La Responde: La VistaVista generada se envía como respuesta a la solicitud al   generada se envía como respuesta a la solicitud al  NavegadorNavegador..

Page 24: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

MVC con PHP5 :: Continuación.MVC con PHP5 :: Continuación.

Page 25: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

Clasificación de los patrones de acuerdo a la capa MVC.Clasificación de los patrones de acuerdo a la capa MVC.

Capa de Datos (Data Layer)Capa de Datos (Data Layer)• ORM – ActiveRecord.ORM – ActiveRecord.

• Data Layer.Data Layer.

• Delegator.Delegator.

Modelo (Lógica)Modelo (Lógica)• Abstract Factory y Registry.Abstract Factory y Registry.

• Value Object.Value Object.

• Business Delegate.Business Delegate.

• Aggregate Entity.Aggregate Entity.

• Service Locator.Service Locator.

• Strategy.Strategy.

Page 26: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

Clasificación de los patrones de acuerdo a la capa MVC.Clasificación de los patrones de acuerdo a la capa MVC.

ControladoraControladora• Inherit Application Controller.Inherit Application Controller.

• Front Controller.Front Controller.

• Delegate Controller.Delegate Controller.

• Service Controller.Service Controller.

VistaVista• Decoration Filter.Decoration Filter.

• Helper View.Helper View.

• Composite View.Composite View.

• Template View.Template View.

• Dispatcher View.Dispatcher View.

Page 27: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

Patterns Design: the Real Life!Patterns Design: the Real Life!

Memento + Singleton ­> Gestión de deshacer,rehacer,historia, transacciones.

Facade ­> Gestión de documentos de varios tipos en una misma interfaz.

Facade + Adapter ­> Una única interfaz de acceso para múltiples bases de datos.

Singleton  +  Registry  ­>  Sistemas  de  Diccionario,  i18n  (Internacionalización), Registros de Sistema y configuración.

Abstract  +  Composite  +  Helper  View  ­>  Construcción  de  vistas  complejas  a partir de archivos sencillos.

Observer + State ­> Sistema de gestión online de usuarios.

Decorator + Composite ­> Sistemas de reportes.

Page 28: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

Patterns Design: the Real Life!Patterns Design: the Real Life!

Abstract Factory + Singleton ­> Fabrica abstracta de controles complejos.

Flyweight ­> Gestión de vistas y uso de class (CSS) y IDREF (XML).

Iterator + Data Layer ­> Explorar datos dentro de los objetos sin iterar sobre el objeto en si (ej. Explorar sobre los datos de una DB usando FOREACH).

Singleton + Decorator + Hierarchical Visitor ­> Gestión de usuarios y Roles.

Composite  +  Facade  +  Interpreter  ­>  Gestores  de  idiomas  especializados, parsers de funciones.

Session Facade + Delegator ­> Loggers y gestores de sesiones de usuario.

Page 29: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

Un ejemplo Desglosado (Memento):Un ejemplo Desglosado (Memento):

Necesidad:

● Retornar un estado previo de una operación (operaciones “undo” o “Rollback”).

● Retonar a estados “específicos” del objeto (History).

● Crear estados de “guardado temporal” o “Check points”.

Page 30: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

Sumario: (Qué debemos identificar):● Identificar  la  clase  que  posee  la  “habilidad”  de  tomar  un  “snapshot”  de  si 

misma. (clase con el rol “Originator”).

● Diseñar  una  clase  que  no  hace  nada  más  que  que  aceptar  y  entregar  los distintos “snapshots” de objetos (clase con el rol “memento”).

● Diseñar una  clase  “gestora”  a  la  cual  el  “originator”  puede preguntar  para que retorne un “estado”; puede causar que el “originator” vuelva a estados previos (clase con el rol “caretaker”).

● La clase cliente (Originator) sabe “cuando” debe salvarse su snapshot.

● La clase cuidadora (CareTaker) sabe “como” debe guardarse el snapshot.

● La clase contenedora (memento) sabe “donde” debe guardarse el snapshot.

Un ejemplo Desglosado (Memento):Un ejemplo Desglosado (Memento):

Page 31: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

Un ejemplo Desglosado (Memento):Un ejemplo Desglosado (Memento):

Estructura:

Page 32: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

Estructura: (Continuación):

Diagrama de Secuencia:

● El  objeto  (originator)  pide  un  “checkpoint”  o  revisión  inicial  a  su custodio (caretaker).

● El  custodio  (caretaker)  toma el objeto actual  y guarda una  copia en una clase estática memento (Set).

● Si el cliente desea un “rollback” o deshacer una acción, simplemente le  solicita al custodio retornar a un estado previo y este “extrae” del memento  el  estado  solicitado;  borra  de  memoria  (haciendo  el checkpoint  respecto  para  posibles  “redo”)  el  Originator  actual  y  lo reemplaza con el extraído desde el memento.

Un ejemplo Desglosado (Memento):Un ejemplo Desglosado (Memento):

Page 33: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

Implementación:● Cada objeto puede llamar “estáticamente” a un “memento object” (Checkpoint State) 

usando  una  clase  “pasarela”  llamada  Caretaker,  que  toma  las  funciones  de monitorización del objeto base (Originator); inicialmente el objeto crea una copia de si mismo dentro del memento (primer estado).

● Memento  Object  puede  simplemente  recibir  (en  un  arreglo  estático)  nuevas  copias (snapshots)  del  objeto  base  (Originator)  e  indizarlas  para  su  obtención  rápida (unlimited undo y lista de historia).

● Memento debe ser “opaco”; es decir, solamente debe saber que guardó un estado de un objeto, sin averiguar que tipo de objeto guardó (Claro que guardando el índice de “a quien” guardó); adicionalmente, el cliente (Originator) desconoce la naturaleza del memento (se entiende con él a través del “caretaker”).

Un ejemplo Desglosado (Memento):Un ejemplo Desglosado (Memento):

Para más implementaciones les recomiendo que visitenwww.phppatterns.com

Page 34: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

De lo horrible a practico :: El Camino MVC en 10 pasosDe lo horrible a practico :: El Camino MVC en 10 pasos

1. Desarrollas  proceduralmente  según  tu  manual  de  10  días  de  PHP3,  mezclas  HTML, código de conexión a la base de datos, loops sobre resultsets, lógica condicional, estilo (CSS) en una misma página.

2. Te das cuenta que si abstraes proceduralmente la lógica de conexión a datos (conectar, consultar, insertar, borrar) podrás cambiar de DB sin traumas (eso dices tú).

3. ¿Si abstraes la lógica también, no será mejor?, ¡nacen los includes infinitos!.

4. ¿Y si centralizo esta clase en un objeto?, ¡puedo tener varias instancias!.

5. Creo que la clase hace mucho, ¿por que no la separamos y reducimos el acoplamiento de los objetos?.

6. Dos objetos diferentes tienen propiedades similares, ¿Por qué no una clase abstracta?.

7. ¿Puedo  gestionar  todo  desde  una  clase  única  de  registro?,  configuraciones  únicas  y Controladora Frontal.

Page 35: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

De lo horrible a practico :: El Camino MVC en 10 pasosDe lo horrible a practico :: El Camino MVC en 10 pasos

8. Te das cuenta que si  separas el código HTML de  las clases de  la aplicación, puedes tener otros tipos de vistas (PDF, XML, WSDL, GTK, entre otros).

9. Tu  gran  aplicación  consiste  en  miles  de  clases,  unidas  entre  sí  (alta  cohesión)  en distintas  capas  (n­tier),  con  pocas  relaciones  entre  ellas  (bajo  acoplamiento),  que interactúan  unas  con  otras  sin  conocerse  (alta  composición),  muy  genéricas  (baja implementación)  y  con  estándares  seguros  sobre  ordenamiento,  nombres  de funciones (interfaces) y seguimiento de patrones.

10. ¡Felicidades!, haz llegado a MVC! ... ¿y ahora ... que?

Page 36: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

De lo horrible a practico :: FrameworksDe lo horrible a practico :: Frameworks

Un Framework,  “Marco de Trabajo” o WAF (Web Application Framework), es una Un Framework,  “Marco de Trabajo” o WAF (Web Application Framework), es una 

serie de librerías (toolkits) que se han unido bajo un único esquema de colaboración serie de librerías (toolkits) que se han unido bajo un único esquema de colaboración 

para  que  de  manera  rápida  (RAD:  Rapid  Application  Development)  logremos para  que  de  manera  rápida  (RAD:  Rapid  Application  Development)  logremos 

desarrollar nuestras aplicaciones.desarrollar nuestras aplicaciones.

Entre las ventajas se cuenta:Entre las ventajas se cuenta:

• No  hay  que  definir  “marco  de  desarrollo”,  solo  “rellenar”  los  huecos  que  los No  hay  que  definir  “marco  de  desarrollo”,  solo  “rellenar”  los  huecos  que  los 

frameworks nos indican.frameworks nos indican.

• Trabajamos sobre un Estándar que miles de personas ya conocen.Trabajamos sobre un Estándar que miles de personas ya conocen.

• Facilidad para encontrar herramientas, librerías o documentación.Facilidad para encontrar herramientas, librerías o documentación.

• Relación Coste de aprendizaje vs. Aplicabilidad mínima.Relación Coste de aprendizaje vs. Aplicabilidad mínima.

Page 37: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

De lo horrible a practico :: FrameworksDe lo horrible a practico :: Frameworks

Algunos Framework MVC:Algunos Framework MVC:

• Solar.Solar.

• CakePHP.CakePHP.

• CodeIgniter.CodeIgniter.

• Symfony.Symfony.

• PHP on Trax.PHP on Trax.

• Zend Framework.Zend Framework.

• Agavi, entre otros...Agavi, entre otros...

Page 38: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

Comparativa de 10 Framework en PHPComparativa de 10 Framework en PHP

Page 39: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

ConclusionesConclusiones

El desarrollo de web aplicaciones mezcla es un conjunto de tecnologías, El desarrollo de web aplicaciones mezcla es un conjunto de tecnologías,  estándares estándares 

y normativas de accesibilidad, reusabilidad y operatividad de la Web que se deben y normativas de accesibilidad, reusabilidad y operatividad de la Web que se deben 

cumplir para evitar posteriores “dolores de cabeza” por desconocimiento del entorno cumplir para evitar posteriores “dolores de cabeza” por desconocimiento del entorno 

de despliegue de la aplicación, es decir la Web.de despliegue de la aplicación, es decir la Web.

Los patrones de diseño, es una forma simple de resolver problemas cotidianos y que Los patrones de diseño, es una forma simple de resolver problemas cotidianos y que 

que  son  muy  repetitivos  en  nuestro  entorno.  No  requiere  una  implantación  con que  son  muy  repetitivos  en  nuestro  entorno.  No  requiere  una  implantación  con 

lenguaje de programación por lo que ofrece, un idioma común entre programadores lenguaje de programación por lo que ofrece, un idioma común entre programadores 

de distintos lenguajes.de distintos lenguajes.

Page 40: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

Conclusiones :: Continuación.Conclusiones :: Continuación.

La programación MVC aplicada a la web no es una opción, ¡es una necesidad!La programación MVC aplicada a la web no es una opción, ¡es una necesidad!

¿Por que?¿Por que?

• Desarrollas para una interfaz, no para una implementación.Desarrollas para una interfaz, no para una implementación.

• Todo tu equipo se dedica a su especialidad preferida.Todo tu equipo se dedica a su especialidad preferida.

• Desarrollo sostenible y mantenible.Desarrollo sostenible y mantenible.

• Es posible migrar en diferentes direcciones.Es posible migrar en diferentes direcciones.

• Evolución rápida de la aplicación.Evolución rápida de la aplicación.

• ¡Terminas más rápido!.¡Terminas más rápido!.

Page 41: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

Conclusiones :: Continuación.Conclusiones :: Continuación.

Los llamados “Framework” o , “WAF”, es una serie de librerías (toolkits) que se han Los llamados “Framework” o , “WAF”, es una serie de librerías (toolkits) que se han 

unido bajo un único  esquema de  colaboración para que de manera  rápida  (RAD: unido bajo un único  esquema de  colaboración para que de manera  rápida  (RAD: 

Rapid Application Development) logremos desarrollar nuestras aplicaciones.Rapid Application Development) logremos desarrollar nuestras aplicaciones.

Page 42: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

SitiosSitios en Internet en Internet :: Continuación :: Continuación

Definiciones básicasDefiniciones básicas

• Desarrollo de software ­ Wikipedia Desarrollo de software ­ Wikipedia (http://es.wikipedia.org/wiki/Desarrollo_de_software)(http://es.wikipedia.org/wiki/Desarrollo_de_software)

• * Diseño web ­ Wikipedia * Diseño web ­ Wikipedia (http://es.wikipedia.org/wiki/Diseno_web)(http://es.wikipedia.org/wiki/Diseno_web)

• Desarrollo web ­ Wikipedia Desarrollo web ­ Wikipedia (http://es.wikipedia.org/wiki/Desarrollo_web)(http://es.wikipedia.org/wiki/Desarrollo_web)

• Aplicación web ­ Wikipedia Aplicación web ­ Wikipedia (http://es.wikipedia.org/wiki/Aplicacion_web)(http://es.wikipedia.org/wiki/Aplicacion_web)

• Patrones de diseño con PHP5 Patrones de diseño con PHP5 (http://www.phppatterns.com/)(http://www.phppatterns.com/)

• Charla “Desarrollo de Aplicaciones Web con Perl ­ Simplicidad, Productividad y Charla “Desarrollo de Aplicaciones Web con Perl ­ Simplicidad, Productividad y 

Elegancia”, Copyright (c) 2004­2006, Ernesto Hernández­Novich, VELUG, Caracas Perl Elegancia”, Copyright (c) 2004­2006, Ernesto Hernández­Novich, VELUG, Caracas Perl 

Mongers. Mongers. <[email protected]><[email protected]>

• Charla “Desarrollo web en Python usando el framework Django” ­ Blog de MilMazzCharla “Desarrollo web en Python usando el framework Django” ­ Blog de MilMazz

                  (http://www.milmazz.com/)(http://www.milmazz.com/)

Page 43: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

SitiosSitios en Internet en Internet :: Continuación :: Continuación

Patrones de DiseñoPatrones de Diseño

• * Patrón de diseño ­ Wikipedia * Patrón de diseño ­ Wikipedia ((http://es.wikipedia.org/wiki/Patron_de_disenohttp://es.wikipedia.org/wiki/Patron_de_diseno))

• Design pattern (computer science) ­ Wikipedia Design pattern (computer science) ­ Wikipedia 

                  ((http://en.wikipedia.org/wiki/Design_pattern_(computer_science)http://en.wikipedia.org/wiki/Design_pattern_(computer_science)))

• MVC ­ Wikipedia MVC ­ Wikipedia ((http://es.wikipedia.org/wiki/MVChttp://es.wikipedia.org/wiki/MVC))

• Model View Controller ­ Wikipedia Model View Controller ­ Wikipedia ((http://en.wikipedia.org/wiki/Model­view­controllerhttp://en.wikipedia.org/wiki/Model­view­controller))

• Patrones de Diseño Patrones de Diseño (http://home.earthlink.net/~huston2/dp/patterns.html)(http://home.earthlink.net/~huston2/dp/patterns.html)

Page 44: Patrones de diseño y Orientación a Objetos en PHP5 - v0.2.9

Patrones de diseño y Orientación a Objetos en PHP5Patrones de diseño y Orientación a Objetos en PHP5

¡¡DesarrolloDesarrollo  rápidorápido  dede  aplicacionesaplicaciones!!

¡Gracias por su atención!

[email protected]@[email protected]@gmail.com

¡¡VisitaVisita  nuestrosnuestros Blog! Blog!

¡Escribenos!¡Escribenos!

¡Visita y descarga este trabajo!¡Visita y descarga este trabajo!

https://finde.gob.ve/projects/lcaballero­doc/https://finde.gob.ve/projects/lcaballero­doc/

http://lcaballero.8k.com/http://lcaballero.8k.com/http://www.jesuslara.com.ve/blog/http://www.jesuslara.com.ve/blog/