Programación por Capas Parte II

download Programación por Capas Parte II

If you can't read please download the document

description

Programación por Capas Parte II. Daniel Correa Botero. Capa Gestor de Base de Datos. Esta capa contiene todo el código sql de la base de datos, contiene la contraseña y datos de conexión a la base de datos, la función para cerrar conexión, entre otras. - PowerPoint PPT Presentation

Transcript of Programación por Capas Parte II

Programacin por Capas Parte II

Programacin por CapasParte IIDaniel Correa BoteroEsta capa contiene todo el cdigo sql de la base de datos, contiene la contrasea y datos de conexin a la base de datos, la funcin para cerrar conexin, entre otras.

Esta capa se encuentra representada por el archivo glight/modules/db.php

Nota: La nica forma en que se debe acceder a esta capa y utilizar las funciones de esta capa es mediante la capa ORM (mediante la variable $this->orm que contienen todos los controladores).Capa Gestor de Base de DatosDentro del archivo glight/modules/db.php encontraremos las siguientes variables que deber modificar cada programador de acuerdo con los datos de su base de datos.

var $server = "localhost"; Indica que en servidor se encuentra la base de datos, por defecto es localhostvar $user = "root"; Indica el nombre de usuario de la base de datosvar $pass = ""; Indica el password de la base de datosvar $db = work"; Indica el nombre de la base de datosVariables de conexinIngresamos a http://localhost/phpmyadmin/

Luego a Bases de datos.

Luego a crear base de datos y le ponemos el nombre de workCreacin de base de datosCREATE TABLE boss (document bigint(20) not null, name VARCHAR(30) not null, charge VARCHAR(30) not null, PRIMARY KEY(document)) ENGINE=InnoDB;Creacin tabla bossNota: Ingresamos a phpmyadmin luego seleccionamos la tabla creada anteriormente despus seleccionamos la opcin sql y copiamos y pegamos el cdigo anterior y lo ejecutamosCREATE TABLE person (document bigint(20) not null, name VARCHAR(30) not null, lastname VARCHAR(30) not null, age int(5) not null, boss bigint(20) null, PRIMARY KEY(document),CONSTRAINT b_p FOREIGN KEY (boss) REFERENCES boss (document)) ENGINE=InnoDB;Creacin tabla personCREATE TABLE user (id bigint(20) NOT NULL AUTO_INCREMENT, name varchar(30) NOT NULL, user varchar(10) NOT NULL, password varchar(72) NOT NULL, type varchar(20) NOT NULL, email varchar(50) NOT NULL, PRIMARY KEY (id), UNIQUE KEY user (user), UNIQUE KEY email (email)) ENGINE=InnoDB;Creacin tabla userINSERT INTO `user` (`id`, `name`, `user`, `password`, `type`, `email`) VALUES (1, 'Admin', 'admin', '$2a$08$JyL3VzFSY76kMir2oA0mt.0XrccedWcvt1F/wu6gFjbZgQmCsjJ4W', 'admin', '[email protected]'),(2, 'Jorge', 'jorge', '$2a$08$tndTZZ2T.oGuH.GsRTYpeuvLHJgnXQ2vCYHE843iaugAIQ6UN3YTe', 'user', '[email protected]');Insertar Datos en userBuscar la funcin SELECT (cerca a la linea 120).Copiar todo el case user y triplicarlo. Modificarlo para los casos boss y person.

Modificacin al bd.phpcase "person":switch($option['option']){case "all" :$info=$this->get_data("SELECT * FROM person;"); break;}break;Son 4 las funciones principales del gestor de base de datos:

- insert: aqu deben ir todos los casos de insercin de todas las tablas de la base de datos.- delete: aqu deben ir todos los casos de borrado de todas las tablas de la base de datos.- update: aqu deben ir todos los casos de editado de todas las tablas de la base de datos.- select: aqu deben ir todos los casos de seleccin de datos de todas las tablas de la base de datos.Funciones principalesrbol de switchesCada una de estas 4 funciones cuenta con 2 niveles de switches

- El primer nivel de switch debe tener como cases todas las tablas, esto quiere decir que si por ejemplo tengo 2 tablas: person y boss entonces dentro del contenido del primer switch de la funcin select deben estar 2 cases, el case "person" y el case "boss

- El segundo nivel de switch es un switch interno de cada case del switch anterior, esto quiere decir que por ejemplo dentro del contenido dentro del case "person" (del ejemplo anterior), existir otro switch que a su vez tendr unos cases (propios de cada aplicacin) que permitirn extraer diferentes datos de la tabla person.Ejemplo de rbol de switches

Ejemplo de rbol de switchesEste ejemplo nos muestra que la funcin select del db.php cuenta con un solo case del switch de nivel 1 (case "person") que corresponde a la tabla person, y a su vez nos muestra que para esta tabla el programador puede necesitar extraer la informacin de todas las person (case "all") o de una sola person de acuerdo a su document (case "one").

De este modo es muy fcil que cualquier programador pueda navegar a travs de estas funciones y encontrar fcilmente la parte donde debe agregar cases para extraer o editar o agregar datos de cualquier tabla.

Nota: por lo general son estas funciones las que deber modificar el programador y agregar a cada una los cases que se considere necesarios.Esta capa es la que nos permite mapear u organizar los datos que vienen de la base de datos en forma relacional a forma objetual, por esta razn se encuentra ubicada en la mitad de la capa de clases y del gestor de base de datos.

Esta capa esta representada por el archivo orm.php ubicado en la ruta glight/modules/orm.php y es la nica que puede acceder a las funciones de la base de datos.

Nota: todo controlador tiene una variable llamada ($this->orm) que representa esta capa.Capa ORM (Object to Relational Mapping)Variables del archivo orm.php- var $db: es una variable que representa una instancia de la capa gestor de base de datos y mediante esta variable se invocan las funciones de dicha capa.

- var $data: es una variable que se usa cuando se recoge informacin del gestor (se usan los selects), esta variable contiene toda esa informacin en forma relacional

- var $objects_to_return: es una variable que contiene la informacin del gestor pero en forma objetual, para este proceso de transformacin se usa la funcin get_objetcs()

- var $numpages: es una variable que se usa para guardar la cantidad de pginas de una consulta por pginas de una tabla.

- var $last_id: es una variable que se usa para guardar el ltimo id que se registro en la base de datos de una tabla.Documento: 1Nombre: JuanCargo: Asistente

Documento: 2Nombre: DanielCargo: Administrador

Documento: 3Nombre: SebastinCargo: Jefe de desarrolloAgregar datos en PhpmyadminAgregamos 3 jefes desde phpmyadminExtraer datos de una tabla(example9.php)

Extraer datos de una tabla (example9.tpl)

JEFES DE LA EMPRESA{section loop=$boss name=i}Documento: {$boss[i]->get('document')}
Nombre: {$boss[i]->get('name')}
Cargo: {$boss[i]->get('charge')} {/section}

18$this->orm->connect(): esta funcin realiza una conexin a la base de datos.

$this->orm->close(): esta funcin finaliza la conexin a la base de datosFuncin Connect y Close$this->orm->read_data(par1, par2, par3): esta funcin realiza todas las consultas de SELECT de la base de datos y almacena toda la informacin recogida en forma relacional por dentro del orm, recibe 3 parmetros:

- par1: este parmetro es un array con los nombres de las clases que deseamos leer de la base de datos (en el caso del ejemplo solo deseamos hacer una lectura de la clase 'boss', pero pueden darse mltiples lecturas - ver tutorial siguiente).

Funcin read_dataFuncin read_data par2: llamado $options, es una matriz o array de 2 dimensiones, por cada clase enviada en el par1, debe existir un $options['nombre_de_la_clase']['option'] = 'valor'; donde valor corresponde al nombre de la opcin de lectura del select del switche de nivel 2 del gestor de base de datos (en el caso de ejemplo como solo hay una lectura de una clase entonces options sera igual a $options['boss']['option']="all"; lo que indica que se desea hacer una lectura de la clase boss del caso 'all' donde 'all' representa extraer todos los datos de la tabla 'boss

- par3 (opcional): llamado $cod, tambin es un array de 2 dimensiones, este parmetro recoge cdigos o informacin adicional que ayuda con SELECTs que dependen de cdigos adicionales, por ejemplo: cuando se desea hacer un SELECT de una persona por su documento, aqu se enviara un parmetro cod con el dato de ese documento (en este ejemplo no se enva este parmetro debido a que no necesitamos seleccionar jefes especficos por cdigos si no que los seleccionamos todos).$this->orm->get_objetcs(par1, par2, par3): esta funcin se encarga de transformar los datos relacionales recogidos por 'read_data' y convertirlos en objetos, al final retorna un objeto con toda la informacin recogida.

- par1: recibe el nombre de la clase (una sola) que se quiere transformar a forma objetual (en el caso del ejemplo solo trabajamos con la clase 'boss' y esa es la que deseamos transformar).Funcin get_objectsFuncin get_objects- par2 (opcional): llamado $components, es un array de 2 dimensiones que contiene informacin para "armar" objetos mas complejos, por ejemplo objetos donde existan relaciones o pegar objetos de un tipo a objetos de otro tipo (mas adelante encontraremos un ejemplo donde armaremos jefes y a estos jefes les pegaremos las personas que tienen asignadas).

- par3 (opcional): llamado $auxiliars, es un array, que contiene el nombre de variables auxiliares adicionales que se desean extraer de la base de datos, por ejemplo: algunas veces deseamos extraer todos los datos de una persona, pero adicionalmente deseamos extraer solo el nombre del jefe y debido a que el nombre del jefe no es un atributo propio de la clase person, entonces se debe usar esta variable auxiliars (mas adelante mostraremos su funcionamiento y un ejemplo).Agregar datos desde phpmyadminDocumento: 101Nombre: RogerApellido: AlvarezEdad: 20Jefe: 1

Documento: 102Nombre: AndresApellido: SossaEdad: 17Jefe: 1

Documento: 103Nombre: CristhianApellido: GarzonEdad: 22Jefe: 1

Agregamos 4 personas desde phpmyadmin

Documento: 104Nombre: CarlosApellido: VivaresEdad: 37Jefe: 2Agregamos un case al switche de nivel 2 de boss

Agregamos un case al switche de nivel 2 de person

Modificamos db.phpcase "one":$document=mysql_real_escape_string($data['document']); $info=$this->get_data("SELECT * FROM boss WHERE document=$document';"); break;case "by_boss":$boss=mysql_real_escape_string($data['boss']); $info=$this->get_data("SELECT * FROM person WHERE boss=$boss';"); break;