Beruflich Dokumente
Kultur Dokumente
[Seleccione la fecha]
Pgina 0
Introduccion
PCM es la sigla de PHP Component Model, la idea de ste documento es redactar de la forma ms simple y concisa una introduccin a sta idea de componentes en php. PCMB es la denominacin de un cdigo bsico diseado para soportar PCM y demostrar su funcionamiento, podra para ilustracin del lector compararse con un Framework, pero no pretende serlo, ms bien pretende ser la representacin prctica de PCM. Es importante siendo el segundo prrafo de ste paper, que se explique al lector, que PCM en Ningn momento puede llegar a compararse con otros modelos de componentes como COM (Component Object Model de Microsoft), pero esto no se menciona a lo largo del paper porque se asume que el lector entiende las limitaciones de PHP y que en realidad ste modelo trata de mejorar la forma de trabajar en php para acercarse lo ms posible a un modelo de componentes real, no obstante no es posible llegar a un grado en el que pueda ser comparado con otros modelos de componentes. PHP no fue diseado para trabajar con componentes, el objetivo de ste modelo es y ser el de apoyar a aquellos programadores de php que quieran empezar a entender la forma de trabajo con componentes, conocer que existe y las ventajas de trabajar de sta forma, para que a la hora de cambiar de lenguaje no represente demasiada complejidad. Dicho esto, PCM se divide en dos grandes partes, los componentes (Components) y el cdigo que controla y valida dichos componentes (Component Library System). A su vez, los componentes se dividen en 4 partes, una de las cuales es opcional por lo que en realidad se divide en 3 partes importantes, tales partes son, Component Body, Component Interface, Component Library. Quiero aclarar que sta es una versin ms actualizada, y si ustedes leen las publicaciones de mi blog pueden encontrar algunos trminos denominados de diferente forma, pero hacen referencia a las mismas divisiones. A lo largo de ste paper explicaremos cada parte de PHP Component Model (de ahora en ms PCM), y cmo funciona PHP Component Model Basic Example (de ahora en ms PCMB) en referencia a PCM. Es de suma importancia aclararle al lector que PCM est en estado experimental cuando se escribi este documento, por lo que puede sufrir grandes cambios de estructura e ideales en cuanto PCM valla madurando. Lamentablemente para que el lector pueda tener una clara comprensin de ste documento, tiene que tener conocimientos del patrn MVC, de programacin orientada a objetos (P.O.O.) y debe tener dominio de conocimientos tales como Clases, Abstracciones, Herencia, Traits, Interface. En general estos ltimos trminos pueden ser encontrados con su explicacin en la pgina de la documentacin de PHP. (referencia a www.php.net)
Redactado por Alexander Eberle Renzulli para Underc0de.org Puede visitar mi blog en console-input-output.blogspot.com
Redactado por Alexander Eberle Renzulli para Underc0de.org Puede visitar mi blog en console-input-output.blogspot.com
Redactado por Alexander Eberle Renzulli para Underc0de.org Puede visitar mi blog en console-input-output.blogspot.com
Componentes
Como expliqu en la introduccin, PCM se divide en dos partes, el Componente y el Component Library System. En sta parte del paper explicar una introduccin de los componentes, luego en otra parte explicar el Component Library System. Los componentes se dividen en tres partes, Component Body, Component Interface y Component Library.
Si un componente no cumple con las caractersticas expresadas previamente, el componente en realidad no es estable, y puede generar un funcionamiento errtico, explicar a continuacin cada una de las caractersticas.
Ejecucin Independiente
El componente debe poder ser ejecutado de forma independiente, sin ningn tipo de implementacin, ms que una implementacin bsica que pruebe el componente y cada una de sus funciones. No obstante la implementacin debe nicamente hacer uso del componente, no puede tener nada ms que, la creacin de una instancia del componente, y una llamada por cada funcin. Si el componente no es capaz de ejecutarse y funcionar sin necesidad de lneas de cdigo extra (como la conexin a la base de datos, o inclusin de un archivo de configuracin, ni siquiera llamar a la funcin sesin_start(); u ob_start();) y solo teniendo en la implementacin funciones del propio componente, dicho componente no es vlido, y es dependiente del sistema que lo utiliza.
Evolucin Independiente
Un componente debe poder ser mejorado por si solo, extendido y ampliado por si solo, sin necesidad de conocer el sistema para el cual se ampla, ni tenerlo, debe poder ser mejorado y extendido nicamente teniendo el cdigo del componente. Si dicho componente no puede ser mejorado, modificado, etc. Sin la necesidad de tener el cdigo del sistema que lo utiliza, el componente est atado a la evolucin del sistema, y es invlido.
Redactado por Alexander Eberle Renzulli para Underc0de.org Puede visitar mi blog en console-input-output.blogspot.com
Eficacia absoluta
El componente no debe tener funciones en estado deprecated o experimental, tales funciones pueden tener un comportamiento errtico, y generar un conflicto en el componente, si un componente no cumple esta condicin est ABSOLUTAMENTE DESACONCEJADO! Ya que puede comprometer la integridad del sistema que lo utilice. Desarrollar componentes de esta forma describe al autor del componente como incompetente. Cuando php.net lanza una nueva versin, se debe revisar los componentes creados y actualizar las funciones que hayan sido quitadas. Lo que ocurre es que un componente debe ser eficaz, y si se implementan funciones inestables o desaconsejadas, pueden hacer al componente ineficaz.
Redactado por Alexander Eberle Renzulli para Underc0de.org Puede visitar mi blog en console-input-output.blogspot.com
Component Body
Teniendo en cuenta que ya expliqu las caractersticas generales que debe cumplir un componente para ser vlido, ahora explicar la primera parte de un componente, que es denominada Component Body o cuerpo del componente, sta parte es en general la parte ms importante, debe contener una clase (ya que los componentes deben estar escritos bajo el paradigma de programacin orientada a objetos) que represente al componente, y que incluya las funciones pblicas, privadas, los atributos, getters y setters que proveer el componente. Todas las partes de los componentes deben estar dentro de una carpeta con el nombre del componente. Es necesario que el archivo que contenga el Component Body, se llame con el prefijo Component por ejemplo, para un componente de correccin ortogrfica, le llamaremos ComponentCorrector.php y que la clase principal que represente al componente se llame de igual forma, por ejemplo: Class ComponentCorrector Hay una cuarta parte en los componentes, que se llama extensin, si necesitas tener ms de una clase puedes crear archivos de extensin con el prefijo Extension por ejemplo ExtensionGamatical.php en el ejemplo podra ser una clase para el corrector gramatical. Ahora bien, volviendo al tema del Component Body, la clase debe cumplir con las caractersticas que haba explicado antes, y debe adems hacer uso del trait ComLib (Component Library). Hay algo que necesito aclarar, vi en varias ocasiones, y hasta yo al principio lo haca as, que la gente programa las clases pensando en por ejemplo listar todos los registros de la tabla usuarios, por lo que crean una clase usuarios y crean funciones tales como, obtener usuarios, editar usuario, etc. En donde utilizan la clase como un medio para acceder a los registros de una tabla, es un error fatal, en realidad una clase representa a un objeto, el objeto tiene atributos, y funciones, la clase lo que hace es definir las caractersticas de dicho objeto, sin darle valores particulares, de modo que luego, al instanciar dicha clase, se creen los valores particulares de un objeto, usar la clase para manipular varias cosas a la vez, es un error, la clase debe estar diseada para luego instanciarse y crear un objeto, no un objeto que represente a muchos. Por lo que es imperativo que utilicen las clases con el fin para las que fueron creadas, y cuando diseen un componente creen las clases pensando en que representan a varios objetos, pero que en realidad cuando se instancie, lo que se cree ser un
Redactado por Alexander Eberle Renzulli para Underc0de.org Puede visitar mi blog en console-input-output.blogspot.com
Redactado por Alexander Eberle Renzulli para Underc0de.org Puede visitar mi blog en console-input-output.blogspot.com
Component Interface
Una de las cosas que son necesarias para que el modelo de componentes funcione correctamente es necesario que un componente tenga comentarios adecuados, pero esto no significa que se llene el cdigo con una explicacin lnea por lnea de lo que se hace, no solo no es necesario, sino que adems no tiene sentido alguno, la idea de los componentes es que sean fciles de usar, simplemente se carguen, y se consulte la interface para obtener un resumen de las funcionalidades y el detalle sobre lo que cada parmetro exige, adems del tipo de dato esperado. La interface cumple la funcin de datasheet de un componente de electrnica por ejemplo, que especifica que hace cada funcin, que entradas se esperan, y que salida se obtendr, por lo que es necesario que todas las funciones pblicas sean declaradas en esa seccin, y sean explicadas con comentarios. Pero que los usuarios sepan que funciones hay y qu hacen no significa que tenga que explicarles a los que usen sus componentes como el componente hace lo que hace, de hecho eso resulta negativo, si utiliza la creacin de componentes como actividad comercial. El archivo Component Interface debe tener de nombre el nombre del componente, pero de prefijo la palabra Interface, quedando por ejemplo InterfaceCorrector.php y dentro debe tener la estructura Interface de php (vase la documentacin de php con respecto al constructor Interface), que de nombre debe tener tambin el prefijo interface, por ejemplo:
Redactado por Alexander Eberle Renzulli para Underc0de.org Puede visitar mi blog en console-input-output.blogspot.com
Component Library
Es la seccin del componente encargada de comunicarse con el mecanismo de control de componentes (Component Library System) para asegurar la validez y evitar comprometer a un sistema, si el componente es alterado, incompatible, o puede llegar a generar errores. El ComLib debe ser un trait, que se encuentre en el archivo ComLib.php dentro de la carpeta del componente, para asegurar su portabilidad e independencia del sistema que lo utilice. Adems si bien en PCM se permite la creacin de componentes formados de clases de tipo abstracta (segn la definicin de clases abstractas de php), PCMB NO permite que la clase principal del componente sea abstracta (no obstante clases dentro de archivos de extensin si son permitidos). El trait ComLib debe contener un mecanismo para devolver informacin del componente, que normalmente se ubica en un archivo com.json dentro de la carpeta del componente, y que contiene un json con un arreglo asociativo con los siguientes valores:
Redactado por Alexander Eberle Renzulli para Underc0de.org Puede visitar mi blog en console-input-output.blogspot.com
10
Redactado por Alexander Eberle Renzulli para Underc0de.org Puede visitar mi blog en console-input-output.blogspot.com
Si el componente hasta este punto es vlido, se libera el CLS dejando disponible dicho componente para su uso. En caso de que un componente no tenga una funcin, pero el que hace uso del componente y desarroll el sistema, ya prepar el sistema para que soporte las nuevas caractersticas y deje de usar caractersticas viejas, lo nico que debe hacer es vaciar el components.ini obligando as a que el CLS vuelva a registrar todos los componentes que hayan sido actualizados. ESTO SOLO DEBE HACERSE SI SE AJUST EL CDIGO PARA QUE FUNCIONE SIN LAS FUNCIONES QUE FUERON QUITADAS.
11
Redactado por Alexander Eberle Renzulli para Underc0de.org Puede visitar mi blog en console-input-output.blogspot.com
12
Redactado por Alexander Eberle Renzulli para Underc0de.org Puede visitar mi blog en console-input-output.blogspot.com
13
Redactado por Alexander Eberle Renzulli para Underc0de.org Puede visitar mi blog en console-input-output.blogspot.com
PCMB Introduccion
PCMB es un mini cdigo diseado para trabajar como la base minina e indispensable para comprobar el funcionamiento de PHP Component Model, este cdigo adems lo utilizo para mis proyectos personales (con previas modificaciones a mi gusto), no presenta un cdigo muy complejo, ms bien simple, que est basado en el patrn de diseo de cdigo de PHP MVC, donde se separa el cdigo en Modelo Vista Controlador, la vista es la parte del cdigo que tiene el diseo, los modelos son una abstraccin de la base de datos, y los controladores son el nexo entre los modelos y las vistas, pero a esto se le agreg un poco de complejidad en la seccin de modelos, donde se agreg el modelo de componentes, permitiendo cargar componentes en los modelos. PCMBasic no pretende ser un cdigo para uso diario, ms bien un simple demostrativo para la implementacin de componentes, si uno tiene en cuenta esto, hay que agregar cosas como un gestor de plantillas para limpiar los diseos web, yo en lo personal constru un componente en base a RainTPL (el gestor de plantillas).Por otra parte un gestor de base de datos (dise un componente propio que acta como gestor de base de datos). Entre otras cosas, ambos componentes los agregar en PCMBasic, para simple demostracin, pero no estn incluidos en documentacin ni se da soporte para estas partes del sistema. Adems tambin se incluy un archivo .htaccess para simplificar el manejo de urls, (comentar un poco ms de su estructura en la seccin de este pdf que habla sobre PCMB Otros detalles) Para finalizar, quiero solicitarle al lector que utilice el cdigo para la funcin que fue desarrollado y no para otras cosas, ya que a diario veo a usuarios, utilizar cdigos para cosas para las que no fueron diseados, y cuando no funcionan correctamente le echan la culpa del mal funcionamiento al autor del cdigo.
PCMB Controladores
En esta seccin del pdf tratar de explicar de la forma ms sencilla el funcionamiento de los controladores y la forma en la que fueron diseados Para empezar les comentar que los controladores estn conformados por clases, que son instanciadas y llamadas las funciones de forma automtica basada en la configuracin de links, que se encuentran en el archivo permitidos.json, donde se crea un arreglo de controladores y sus funciones internas que son permitidas, notese que el archivo est escrito bajo la normativa de JSON, puede buscar en google la documentacin respectiva. Las acciones son el primer texto que luego se le asigna un arreglo compuesto por la funcin que est permitida.
14
Redactado por Alexander Eberle Renzulli para Underc0de.org Puede visitar mi blog en console-input-output.blogspot.com
PCMB Vistas
Las vistas pueden ser creadas y cargadas a gusto, PCMBasic no incluye ningn tipo de gestin para las mismas, no obstante a modo demostracin se agrega un componente basado en RainTPL (puede encontrar la documentacin o elegir no utilizarlo borrando la carpeta e incorporando otro).
PCMB Modelos
Los modelos tienen que ser creados como clases estticas, no hay razn alguna para crear un modelo e instanciarlo, (entindase que los objetos deben ser creados en base a los componentes, armados y devueltos para que los controladores hagan uso de los mismos), y deben proveer de gestin de base de datos. En realidad no hay ms restricciones para los modelos, pero los mismos fueron diseados para hacer de plataforma entre los componentes, por ejemplo si se quiere mostrar una lista de usuarios, donde hay un componente usuarios, y se tiene que instanciar la clase de dicho componente para cada uno de los usuarios, se llamara a la funcin del modelo que gestiona los usuarios para obtener un arreglo con todas las instancias de cada usuario (es a modo de ejemplo para que pueda entender la idea para la que fue diseado, y esa tambin es la razn por la que debera ser esttica, no es requerido instanciarla y no se debera hacer).
16
Redactado por Alexander Eberle Renzulli para Underc0de.org Puede visitar mi blog en console-input-output.blogspot.com