You are on page 1of 10

AGENOR 0.5.

5 Librera MVA
ObjetivoPHP
Este documento contiene un pequeo manual de cmo se debe utilizar Agenor, una librera que nos proporciona una base para usar el Patrn MVA (Model View Adapter o Mediating-Controlling), que es un derivado del popular MVC.

ObjetivoPHP.com [Escriba la direccin de la compaa] [Escriba el nmero de telfono] [Escriba el nmero de fax] [Seleccione la fecha]

Manual Agenor 0.5.5


001. QUE ES AGENOR
Lo definimos como una librera que nos proporciona una estructura bsica de programacin, en el lenguaje PHP, bajo el paradigma de orientacin a objetos y usando un derivado del patrn arquitectnico MVC (Modelo Vista Controlador), que su cometido es separar el modelo de datos de las vistas o interfaz de usuario. En la definicin, mencionamos un derivado de MVC, nosotros optamos por MVA Modelo Vista Adaptador o Controlador Mediador (Mediating-Controller). La diferencia es la forma en que se interrelacionan los tres componentes del patrn.

CONTROLADOR

MODELO

VISTA

[Figura de relacionamiento MVC] En el MVC, el controlador recibe una peticin que proviene de la vista, este va a responder modificando el modelo, como la vista est observando al Modelo en todo momento, cuando se produce un cambio en este, la vista se actualiza por si sola. MVA persigue la misma finalidad de separar el modelo de datos de las vistas, lo nico que lo realiza de diferente forma, opta por no relacionar de manera alguna la vista con el modelo.

ADAPATADOR

VISTA

MODELO

[Esquema MVA] Con este esquema se observa que, la nica forma de relacionamiento que tienen la vista y el modelo es a travs del Adaptador (o controlador mediador) , por lo cual el nico que tiene conocimiento de que existe un modelo y una vista es el adaptador. MVA digamos es ms estricto que MVC, pues la vista est totalmente desacoplada del Modelo, de hecho no la conoce.

ObjetivoPHP.com |AGENOR LIBRERIA MVA

Manual Agenor 0.5.5


Que logramos al usar este patrn, Muchas vistas pueden acceder indirectamente al Modelo usando un mismo Adaptador. Las vistas se olvidan del modelo de datos pues el adaptador es quien se comunica con el modelo (No necesitan estar observando si cambia el modelo). Podemos tener diferentes Adaptadores para cada par de Modelos Vistas. Las vistas contendrn cdigo ms tonto, pues ahora el Adaptador es quien se relaciona con el modelo.

En base a estas ventajas es que nos decidimos por usar el patrn MVA. Es de destacar que no se pretende realizar un FrameWork, si no una librera con algunas utilidades bsicas para el desarrollo de una aplicacin web.

Fuente: http://www.madeinflex.com/2010/07/24/model%E2%80%93view%E2%80%93controller-yalgunas-de-sus-variantes/ Autor: Sergi Dote Teixidor

ObjetivoPHP.com |AGENOR LIBRERIA MVA

Manual Agenor 0.5.5


002. REQUERIMIENTOS
Veremos que necesitamos para ejecutar el sistema con satisfaccin: PHP 5.3.3 o superior Tener instalado y activado el Modulo rewrite de apache. Cualquier base de datos si usamos sistemas con permisos. Navegador compatible con HTML5, para las pruebas

Conocimientos Recomendados: Programacin Orientada a Objetos Conocimiento de namespaces en PHP Ganas de Aprender. Bueno si cumples con estos requisitos, ests listo para comenzar a utilizar Agenor y agilizar el desarrollo de tus futuros sitios, puedes saltearte el prximo captulo pues solo expongo porque surge esta idea y comenzar con el manual propiamente dicho.

ObjetivoPHP.com |AGENOR LIBRERIA MVA

Manual Agenor 0.5.5


003. PORQUE AGENOR
Hace un tiempo haba empezado a conocer los distintos frameworks PHP, de ellos me llamaron la atencin Zend y Symfony, ambos por su gran comunidad, de estos dos eleg comenzar a estudiar Zend, quizs por el hecho de que es como un FW casi oficial de PHP y coincidiendo con una promocin de un curso del mismo. Paso el tiempo, termine el curso y quera poner a pruebas mis conocimientos, para ello haba elegido pasar una pequea rutina que escrib (Deame3p) a Zend. Comienzo con el proyecto de refactorizacin a el afamado FW y malas noticias, la empresa que desarrolla el mismo anuncia que pronto saldra la versin 2.0, hasta ah no haba problemas, el problema es que me entero a travs de foros y blogs que los cambios seran tan notables que los cdigos realizados en la versin 1.x no seran compatibles con la nueva versin y tendra que reconvertir el cdigo. Con tal situacin enfrente comienzo a leer sobre symfony y veo que con dicho FW, tambin haba pasado lo mismo hace muy poco la nueva versin no era compatible hacia atrs. Con esos dos hechos en poco tiempo, dije bueno me construir una librera MVC, intentando alguna que otra buena prctica de programacin y usando el modelo MVC, y empec a leer de crear mi propio FW, bueno ah encontr muchos argumentos para desistir del intento, entre ellos: No hay que reinventar la rueda. Los FW estn basados sobre buenas prcticas de programacin. Que nadie es tan especial, que necesite un FW especial. Un FW maduro ya tiene todo lo necesario para montar tu aplicacin. Nunca podrs realizar algo tan bueno como una comunidad. Es ms probable que tu FW tenga ms errores que cualquier otro mantenido por una comunidad.

En definitiva, si bien los conceptos mencionados son todos vlidos, creo que lo son para aquellos que se dedican profesionalmente a este tema, ya sea por razones de productividad, eliminacin de errores, tener disponible con facilidad personal que domine la herramienta, etc; pero para alguien que realiza esto como pasatiempo (aficin) esos argumentos pierden sustento y es ms la satisfaccin personal de haberse sacado las ganas de realizar algo distinto y que aporte nuevos conocimientos sobre el lenguaje y las buenas prcticas de programacin, como he visto en algn blog que deca todos deberan tener un intento de crear su propio FW. Es as que comenc de a poco a desarrollar lo que hoy doy a conocer como AGENOR, mi primer intento de base para un sitio web, no es un FW. Quizs quede en un eterno alfa, pero y quien me quita lo programado.

Saludos y espero que te guste esta pequea librera.

ObjetivoPHP.com |AGENOR LIBRERIA MVA

Manual Agenor 0.5.5


004. ESQUELETO DE AGENOR
Vamos a ver como tenemos que estructurar el proyecto.

Vemos en el cuadro de la izquierda la estructura del sitio. /agenor: contiene el motor de la aplicacin, core o engine. /configs: archivos de configuracin del sistema principal, son archivos php. /layout: encontramos las posibles plantillas para el sitio con sus diferentes tipos de archivos css, js, phtml, etc. /libs_external: toda librera que sea una utilidad de tercero debera de ubicarse en esta carpeta, ej: Doctrine, Dompdf, PHPExcel, etc. /log: carpeta para los archivos de errores del sistema. /modulos: esta carpeta, contiene la aplicacin en si misma o mejor dichos los mdulos en que este dividido el sistema. Como primer dato se puede llamar como uno quiera, no es necesario que se llame mdulos. /plugins: son pequeas funciones que realizan alguna funcin necesaria para el sistema. /public: carpeta donde se guardar documentos pblicos del sistema. /usrlib: puede existir o no en este caso es usada para extender alguna funcionalidad del sistema. .htaccess: archivo de configuracin de las urls de agenor. Index.php: arranca el sistema.

Vamos a analizar la carpeta de la aplicacin misma que en este caso es mdulos, aunque el nombre no tiene porqu ser este, es configurable por razones de seguridad, es decir se puede optar por un nombre ms raro, dado que la url no delata el nombre del mismo. Bajo este directorio encontraremos carpetas, estas carpetas como ser en la figura, acceso, form, icap, index, organigrama representan una aplicacin independiente en si cada una de la otra, incluso pueden
ObjetivoPHP.com |AGENOR LIBRERIA MVA 5

Manual Agenor 0.5.5


tener una configuracin totalmente distinta y tener su propio levantador de recursos o bootstrap. Si prestamos atencin tambin vemos el archivo BootstrapApplication.php este archivo ser el encargado de levantar los recursos que sean afines a todos los mdulos o los ms comunes a todos ellos. Es decir si tenemos 10 mdulos y 9 usan un determinado recurso se levanta en el bootstrapApplication, ahora si un recurso es especial de un mdulo se difiere la carga hasta que sea llamado dicho modulo. Ingresaremos a un mdulo especficamente para ver su estructura en este caso lo haremos con el modulo acceso. ----acceso |----configs | |----acceso.php | |----controllers | |----IndexController.php | |----LoginController.php | |----etc | |----UsuarioController.php | |----forms | |----Clave.php | |----Usuario.php | |----layout | |----css | | |----style.css | |----js | | |----javascript.js | |----phtml | | |----index_index.phtml | | |----login_index.phtml | | |----perfil_index.phtml | |----.htacces | |----models |----LoginModels.php |----Menu.php |----MenuModels.php |---- etc Destacamos que en negrita y azul estn los directorios o carpetas y sin ningn resaltado los archivos. El primer directorio es configs, en el incluiremos los archivos de configuracin del mdulo en cuestin, es decir si ya se configuro los datos necesarios en la carpeta configs del raz del sitio, no hace falta repetir aqu la configuracin. Solo se pone la configuracin especfica del mdulo.
ObjetivoPHP.com |AGENOR LIBRERIA MVA 6

Manual Agenor 0.5.5


Directorio controllers: se incluyen las clases controladoras, si porque no se llaman adaptadoras o mediadoras, se quiso dejar el nombre de controlador por lo conocido de la funcionalidad que otorga el mismo y no confundir con el patrn Mediator o Adapter, en la discusin estaba el ponerle en el nombre la terminacin MController, por el nombre del patrn Mediating-Controling. Estas clases son las que tomaran la peticin, le pedirn la informacin que necesiten mostrar y se las pasaran a la vista. Directorio forms: es un directorio especial y puede no existir, ms adelante hablaremos de l. Directorio layout: es el que se encarga de armar lo que se mostrara por pantalla, la interfaz de usuario, la carpeta ms importante es phtml donde se guardan las plantillas php que debern mostrarse. Las otras carpetas css o js, no son necesarias si no se requieren archivos css o js especficos del mdulo. El directorio phtml contiene las vistas tontas, simples plantillas phtml. Por el momento es necesario el archivo .htacces para que no cause problemas el incluir archivos js y css. Directorio models: contiene los modelos del sistema y toda la lgica del negocio. Bueno a grandes rasgos hemos realizado una radiografa de Agenor, que iremos ampliando a medida que entremos a profundizar en el sistema.

ObjetivoPHP.com |AGENOR LIBRERIA MVA

Manual Agenor 0.5.5


005. FORMACION DE URLS
Un aspecto ntimamente ligado a la forma del esqueleto del sistema son las urls, la formacin de las mismas indican que archivos sern ejecutados. Una url de agenor se ve de la siguiente forma: www.urlsitio.com/modulo/controlador/accion/param1/valor1/...../pamamn/valorn.Analizando la misma vemos que luego de la url base del sitio, contendr el modulo que se quiere ejecutar, este se deber corresponder con uno de los directorios bajo la carpeta mdulos del directorio raz, o sea en nuestro ejemplo podra ser, acceso, index, form, contable, organigrama. Luego sigue controlador, si en la parte anterior el modulo seleccionado fue acceso, ahora podramos seleccionar cualquiera de los archivos bajo el directorio controllers, en este caso en la url solo se debe poner el nombre del archivo controlador sin la finalizacin Controller.php. Es decir si queremos ejecutar un mtodo de LoginController.php, por url se pasara el valor Login en el lugar de controlador. Accin: se deber corresponder con el nombre de un mtodo dentro de la clase controller sin contener la palabra Action. Si queremos seleccionar el mtodo loginAction del controlador LoginController, entonces accin debera contener la palabra login, no se debe incluir el postfijo Action. En el prximo tema veremos la nomenclatura de los archivos controladores, modelos y vistas y la relacin que existe entre ellos, esto nos permitir mejorar la comprensin de este tema.

ObjetivoPHP.com |AGENOR LIBRERIA MVA

Manual Agenor 0.5.5


006. CONVENCIONES Y NOMENCLATURA
Un tema importante que los ms curiosos ya habrn descubierto es la forma de nombrar los distintos tipos de archivos del sistema y las reglas para su formacin. Reglas Generales: 1. Un archivo, solo puede contener una clase, o interface. 2. El nombre del archivo deber ser el mismo nombre de la clase. Si la clase se llama Utilidades, entonces el archivo se deber llamar Utilidades.php 3. Es obligatorio el uso de namespaces, en cada clase se deber indicar el mismo, que ayudara a descubrir donde se encuentra ubicada la clase. Ej.: namespace acceso\controllers; hace referencia a que la clase estar en la carpeta controllers que a su vez est contenida en la carpeta acceso. 4. Siempre se deber utilizar camelCase para los nombres de las clases al igual que los archivos.

ObjetivoPHP.com |AGENOR LIBRERIA MVA

You might also like