Documentos de Académico
Documentos de Profesional
Documentos de Cultura
G - Patrones de Diseño en PHP
G - Patrones de Diseño en PHP
Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
Licencia
Copyright(c)2006AnibalRojas Copyright(c)20042006ErnestoHernndezNovich. Modificacionesyadaptaciones. Copyright(c)2006,2007LeonardoCaballero/JessLara. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free SoftwareFoundation;withnoInvariantSections,noFrontCover Texts,andnoBackCoverTexts.Acopyofthelicenseisincluded inthesectionentitled"GNUFreeDocumentationLicense".
Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
GNUFreeDocumentationLicense
Puedeobtenerunacopiadelalicencia"GNUFreeDocumentation License" en los ficheros llamados "copyright.txt" en ingles, "copyright.es.txt"enespaoloenlossiguientessitiosenInternet:
http://www.gnu.org/copyleft/fdl.html http://www.fsf.org/licensing/licenses/fdl.html
Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
Definicionesbsicas
Estasdefinicionessonmsimportantedeloqueparece.
Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
TecnologasinvolucradasenlaWeb.
Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
FuncionamientobsicodeunaAplicacinWeb.
DesdeelpuntodevistadelUsuario: 1) ElusuarioabreunURL. 2) Llenaunformulario. 3) Oprimealgunodelosbotones. 4) Laaplicacingeneraunnuevoformularioconresultados.
Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
FuncionamientobsicodeunaAplicacinWeb::Continuacin.
Esundocumento.php
Solicitaun Documento
Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
FuncionamientobsicodeunaAplicacinWeb::Continuacin.
Basede Datos
MdulodeFunciones
ODBC
Motor Zend
1 6
Interfasedelservidor
Compila
4 5
Ejecuta
Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
ProyeccionesdelaWeb.
Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
FactibilidadparaeldesarrollodeAplicacionesWeb.
Cuntocuestaencontrarunprogramadorquesepatodoeso? Cuntocuestamantenertodaestamezclademultilenguaje? Encuantotiempopuedeofreceralclienteunprototipodelaaplicacin? Cuantotiemponecesitaparacambiartodalainterfazdeusuariodelaaplicacin
alasnecesidadesdelcliente?
Puede garantizar que la aplicacin cumpla con los estndares y normativas de
accesibilidad,reusabilidadyoperatividaddelaWeb?
Sinosabesresponderaestaspreguntasconrespuestasatiempos cortos,prcticosyrazonables,yaentiendeselgranproblema!
Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
HablemosdePHP.
OriginalmentePHPfuesiglasdePersonalHomePageTools. Creadoen1995porRasmuLerdorf. Ao1997,cambiossignificativos. AlredefinirseelmotorrecibilassiglasdelacrnimoHypertextPreProcessor PHP3,creadoporAndiGutmansyZeevZuraski. MotorZend. PHP4(ao2000). PHP5(ao2004). Estprevistoellanzamientoenbrevedelarama6dePHP. PHP4perdersuestadodeestableel31dediciembredel2007.
Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
IntroduccinaPHP5.
Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
PHP5yProgramacinOrientacinaObjetos.
PHP5soportaunagrancantidaddefuncionalidadesparaOOP.
Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
Patronesdediseo.
Lospatronessonsimplessolucionesaproblemasrecurrentesqueocurrenunayotra vezennuestroentorno. Luegodellegaralasolucin,encapsulamostodaslasvariablesyfactoresparallegar alasolucinydisponemosdeunarecetapararesolvermilveceselproblemasin tenerquereinventarlarueda. Los desarrolladores los usan como una forma de reutilizar la experiencia, clasificando las soluciones bajo trminos de comn denominacin Un diccionario?,esolohacesconunsingleton+registrypattern. Causandoadems,unidiomacomnentreprogramadoresdedistintoslenguajes.
Uno de los principales precursores del movimiento acerca de los Design Patterns fue Martin Fowler. Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
Patronesdediseo::Continuacin.
Enelreadepatronesdediseohablamosdesolventarproblemasde:
Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
Usodelospatronesdediseo.
Lospatronesdediseonospermiten:
Extensibilidad. Flexibilidad. Concurrencia. Organizacin. Solucionesyaprobadasyefectivas. Mayorfacilidadparahacercambios. Reutilizacin. Refactorizacin. Idiomacomndeintercambiodesoluciones. BuenasprcticaseneldesarrollodeSoftware.
Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
Ideasbsicaseneldesarrollodeaplicaciones.
Loqueselograentodaaplicacin,alimplementarpatronesesque,enconjuntocon laprogramacinOrientadaaObjetos(OOP):
Encapsulemoslalgicadelaaplicacindetalmaneraquesea innecesariopensarabajonivel.
(Tendrqueescribirunafuncinquehagaeso?)
Desviarsedelalgicademiaplicacin.
(ParaimplementarAJAXdebousarotracosa?)
Preocuparsenicamenteporlaoperatividaddelaaplicacin
(Funcionaresaimplementacinderolesyseguridadquemeinvent?).
Lograrunaflexibilidadsinlmites
(Funcionareseobjetoenotroproyectofuturo?).
Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
Clasificacindelospatronesdediseo.
Decreacin:
Comosecreaninstanciasdelosobjetosy/ocomoseimplementan.
Singleton,Multiton,Facade.
Estructurales:
Comoserelacionanycombinanlasclasesparacrearnuevasestructuras.
AbtractFactory,Visitor,Facade,Flyweight,Adapter.
Decomportamiento:
Comointeractanycooperanlasclases.
Decorator,Memento,ChainofResponsability,Flyweight,Adapter.
Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
Clasificacindelospatronesdediseo::Continuacin.
Dembito: DeComoseutilizandinmicamentelosObjetos.
Delegator,Observer,Interpreter,Visitor.
Deoperacin
Decomosecomportarlaaplicacin.
BusinessLogic,ProxyAdapter,FrontController,ModelViewController.
Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
MVC(Modelviewcontroller).
1) Patrndediseoorientadoaobjetos. 2) Describe cualquier aplicacin con interaccin humana y es particularmente adecuadoparaaplicacionesWeb. 3) Separaclarayconsistentementelas"preocupaciones": 1) Modelo(Model)Interaccinconlabasededatos. 2) Vista(View)Presentacindelainformacinalusuario. 3) Controlador(Controller)Flujodeinformacinyprocesos. SisuaplicacinnoestdiseadasiguiendoMVC,inevitablementetendrproblemas deescalabilidad,demantenimientoydeextensin.
Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
MVC(Modelviewcontroller)::Continuacin.
Permitemltiplesrepresentaciones(vistas)delamismainformacin(modelo). De forma muy fcil permite agregar, remover o cambiar interfaces de usuarios (vistas). Permite responder a lo ingresado por el usuario (controladora) para ser fcilmentecambiando. Permitequemltiplesdesarrollossimultneamenteactualizalainterfaz,lalgica denegociosointroducirunaplicacinnuevasinafectaraotroscdigofuentes. Loscambiospuedensucederdinmicamenteenlaejecucindelaaplicacin. Prometereducircdigo(ej.unavistapuedeserusadacondiferentesmodelos). Ayudaaenfocaralosdesarrolladoresenunsolosimpleaspectodelaaplicacin almismotiempo.
Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
MVCconPHP5.
Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
MVCconPHP5::Continuacin.
1) Solicitud:ElusuarioejecutaunNavegador,pideunURLsolicitandoalaAplicacin. 2) Despacha:LaAplicacindelegaalacapaControladoralapeticindelusuariodesde elNavegador. 3) Almacena:ConsultaenlacapaModelopormedioalacapadeDatosdelmanejador debasededatosexistente. 4) Devuelve:LacapadeDatosdevuelvelosresultadosendatapuraalacapa Controladora. 5) Genera:LacapaControladorageneralacapadeVistaenbasealostiposdedatos generadosporlacapadeDatos. 6) Responde:LaVistageneradaseenvacomorespuestaalasolicitudalNavegador.
Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
MVCconPHP5::Continuacin.
Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
ClasificacindelospatronesdeacuerdoalacapaMVC. CapadeDatos(DataLayer)
Modelo(Lgica)
PatronesdediseoyOrientacinaObjetosenPHP5
ClasificacindelospatronesdeacuerdoalacapaMVC. Controladora
Vista
PatronesdediseoyOrientacinaObjetosenPHP5
PatternsDesign:theRealLife!
Memento+Singleton>Gestindedeshacer,rehacer,historia,transacciones. Facade>Gestindedocumentosdevariostiposenunamismainterfaz. Facade+Adapter>Unanicainterfazdeaccesoparamltiplesbasesdedatos. Singleton + Registry > Sistemas de Diccionario, i18n (Internacionalizacin), RegistrosdeSistemayconfiguracin. Abstract + Composite + Helper View > Construccin de vistas complejas a partirdearchivossencillos. Observer+State>Sistemadegestinonlinedeusuarios. Decorator+Composite>Sistemasdereportes.
Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
PatternsDesign:theRealLife!
AbstractFactory+Singleton>Fabricaabstractadecontrolescomplejos. Flyweight>Gestindevistasyusodeclass(CSS)yIDREF(XML). Iterator+DataLayer >Explorardatosdentrodelosobjetossiniterarsobreel objetoensi(ej.ExplorarsobrelosdatosdeunaDBusandoFOREACH). Singleton+Decorator+HierarchicalVisitor>GestindeusuariosyRoles. Composite + Facade + Interpreter > Gestores de idiomas especializados, parsersdefunciones. SessionFacade+Delegator>Loggersygestoresdesesionesdeusuario.
Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
UnejemploDesglosado(Memento):
Necesidad:
PatronesdediseoyOrientacinaObjetosenPHP5
UnejemploDesglosado(Memento):
Sumario:(Qudebemosidentificar):
Identificar la clase que posee la habilidad de tomar un snapshot de si misma.(claseconelrolOriginator). Disear una clase que no hace nada ms que que aceptar y entregar los distintossnapshotsdeobjetos(claseconelrolmemento). Disear una clase gestora a la cual el originator puede preguntar para que retorne un estado; puede causar que eloriginator vuelvaa estados previos(claseconelrolcaretaker). Laclasecliente(Originator)sabecuandodebesalvarsesusnapshot. Laclasecuidadora(CareTaker)sabecomodebeguardarseelsnapshot. Laclasecontenedora(memento)sabedondedebeguardarseelsnapshot.
Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
UnejemploDesglosado(Memento):
Estructura:
Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
UnejemploDesglosado(Memento):
Estructura:(Continuacin):
DiagramadeSecuencia:
El objeto (originator) pide un checkpoint o revisin inicial a su custodio(caretaker). El custodio (caretaker) toma el objeto actual y guarda una copia en unaclaseestticamemento(Set). Sielclientedeseaunrollbackodeshacerunaaccin,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 reemplazaconelextradodesdeelmemento.
Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
UnejemploDesglosado(Memento):
Implementacin:
Cadaobjetopuedellamarestticamenteaunmementoobject(CheckpointState) usando una clase pasarela llamada Caretaker, que toma las funciones de monitorizacindelobjetobase(Originator);inicialmenteelobjetocreaunacopiade simismodentrodelmemento(primerestado). Memento Object puede simplemente recibir (en un arreglo esttico) nuevas copias (snapshots) del objeto base (Originator) e indizarlas para su obtencin rpida (unlimitedundoylistadehistoria). Mementodebeseropaco;esdecir,solamentedebesaberqueguardunestadode unobjeto,sinaveriguarquetipodeobjetoguard(Claroqueguardandoel ndicede aquienguard);adicionalmente,elcliente(Originator)desconocelanaturalezadel memento(seentiendeconlatravsdelcaretaker).
Paramsimplementacioneslesrecomiendoquevisiten www.phppatterns.com Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
Delohorribleapractico::ElCaminoMVCen10pasos
1. Desarrollas proceduralmente segn tu manual de 10 das de PHP3, mezclas HTML, cdigodeconexinalabasededatos,loopssobreresultsets,lgicacondicional,estilo (CSS)enunamismapgina. 2. Tedascuentaquesiabstraesproceduralmentelalgicadeconexinadatos(conectar, consultar,insertar,borrar)podrscambiardeDBsintraumas(esodicest). 3. Siabstraeslalgicatambin,nosermejor?,nacenlosincludesinfinitos!. 4. Ysicentralizoestaclaseenunobjeto?,puedotenervariasinstancias!. 5. Creoquelaclasehacemucho,porquenolaseparamosyreducimoselacoplamiento delosobjetos?. 6. Dosobjetosdiferentestienenpropiedadessimilares,Porqunounaclaseabstracta?. 7. Puedo gestionar todo desde una clase nica de registro?, configuraciones nicas y ControladoraFrontal.
Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
Delohorribleapractico::ElCaminoMVCen10pasos
8. Te das cuenta que si separas el cdigo HTML de las clases de la aplicacin, puedes tenerotrostiposdevistas(PDF,XML,WSDL,GTK,entreotros). 9. Tu gran aplicacin consiste en miles de clases, unidas entre s (alta cohesin) en distintas capas (ntier), con pocas relaciones entre ellas (bajo acoplamiento), que interactan unas con otras sin conocerse (alta composicin), muy genricas (baja implementacin) y con estndares seguros sobre ordenamiento, nombres de funciones(interfaces)yseguimientodepatrones. 10.Felicidades!,hazllegadoaMVC!...yahora...que?
Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
Delohorribleapractico::Frameworks
Un Framework, Marco de Trabajo o WAF (Web Application Framework), es una seriedelibreras(toolkits)quesehanunidobajounnicoesquemadecolaboracin para que de manera rpida (RAD: Rapid Application Development) logremos desarrollarnuestrasaplicaciones. Entrelasventajassecuenta:
No hay que definir marco de desarrollo, solo rellenar los huecos que los frameworksnosindican. TrabajamossobreunEstndarquemilesdepersonasyaconocen. Facilidadparaencontrarherramientas,librerasodocumentacin. RelacinCostedeaprendizajevs.Aplicabilidadmnima.
Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
Delohorribleapractico::Frameworks
AlgunosFrameworkMVC:
Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
Comparativade10FrameworkenPHP
Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
Conclusiones
Eldesarrollodewebaplicacionesmezclaesunconjuntodetecnologas, estndares ynormativasdeaccesibilidad,reusabilidadyoperatividaddelaWebquesedeben cumplirparaevitarposterioresdoloresdecabezapordesconocimientodelentorno dedesplieguedelaaplicacin,esdecirlaWeb. Lospatronesdediseo,esunaformasimplederesolverproblemascotidianosyque que son muy repetitivos en nuestro entorno. No requiere una implantacin con lenguajedeprogramacinporloqueofrece,unidiomacomnentreprogramadores dedistintoslenguajes.
Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
Conclusiones::Continuacin.
LaprogramacinMVCaplicadaalawebnoesunaopcin,esunanecesidad! Porque?
Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
Conclusiones::Continuacin.
LosllamadosFrameworko,WAF,esunaseriedelibreras(toolkits)quesehan unido bajo un nico esquema de colaboracin para que de manera rpida (RAD: RapidApplicationDevelopment)logremosdesarrollarnuestrasaplicaciones.
Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
SitiosenInternet::Continuacin
Definicionesbsicas
CharlaDesarrollowebenPythonusandoelframeworkDjangoBlogdeMilMazz
(http://www.milmazz.com/)
Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
SitiosenInternet::Continuacin
PatronesdeDiseo
(http://en.wikipedia.org/wiki/Design_pattern_(computer_science))
Desarrollorpidodeaplicaciones!
PatronesdediseoyOrientacinaObjetosenPHP5
Graciasporsuatencin!
VisitanuestrosBlog!
http://lcaballero.8k.com/ http://www.jesuslara.com.ve/blog/
Visitaydescargaestetrabajo!
https://finde.gob.ve/projects/lcaballerodoc/
Escribenos!
leonardocaballero@gmail.com jesuslara@gmail.com
Desarrollorpidodeaplicaciones!