sesión 21 - capa abstracción base de datos

25
BASES DE DATOS AVANZADAS Sesión 21 – Capa de abstracción de base de datos

Upload: miguel-ibarra

Post on 26-Mar-2015

415 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: sesión 21 - capa abstracción base de datos

BASES DE DATOS AVANZADAS Sesión 21 – Capa de abstracción de base de datos

Page 2: sesión 21 - capa abstracción base de datos

Capa de abstracción de base de datos En la ultima sesión vimos el ejemplo de lo que

ya no deben hacer desde ahora <html>

<body> <table> <tr> <td>Nombre</td> <td>Paterno</td> <td>Materno</td> </tr> <?php mysql_connect ( 'localhost', 'user', 'password' ); mysql_select_db ( 'alumnos' ); $results = mysql_query ( 'select nombre, paterno, materno from alumnos order by paterno, materno, nombre' ); while ( ($row = mysql_fetch_array ( $results )) != FALSE ) { echo <<<EOL <tr><td>{$row[0]}</td><td>{$row[0]}</td><td>{$row[0]}</td></tr> EOL; } ?> </table>

Page 3: sesión 21 - capa abstracción base de datos

Capa de abstracción de base de datos Se plantearon las siguientes interrogantes:

Que pasaría si… Cambiara el nombre de usuario/contraseña de la base

de datos Cambiara el nombre de la base de datos a la que hay

que conectarse O peor aún… Tuviéramos que migrar la aplicación para que use

otro SGBD

Page 4: sesión 21 - capa abstracción base de datos

Capa de abstracción de base de datos

Las primeras 2 interrogantes las podemos

solucionar muy facilmente con un archivo ‘bootstrap’

‘Bootstrapping’ se refiere al proceso de inicio de un programa o sistema

Page 5: sesión 21 - capa abstracción base de datos

Capa de abstracción de base de datos

Boo

tsra

p

Index.php

Altausuario.php

Busquedausuario.php

Archivo4.php

archivo[n].php

Page 6: sesión 21 - capa abstracción base de datos

Capa de abstracción de base de datos Para fines del ejemplo anterior, nuestro

archivo bootstrap contendría la rutina de conexión a base de datos

<?php mysql_connect ( 'localhost', 'bda', 'bda' ); mysql_select_db ( 'bda' ); ?>

Page 7: sesión 21 - capa abstracción base de datos

Capa de abstracción de base de datos Y en nuestro archivo principal, solo lo

incluiremos antes de hacer cualquier otra cosa <?php require_once 'bootstrap.php'; ?> <html> <body> <table border="1" cellpadding="3" cellspacing="1"> <tr> <td>Nombre</td> <td>Paterno</td> <td>Materno</td> </tr> <?php $results = mysql_query ( 'select nombre, apellidoPaterno, apellidoMaterno from alumnos order by apellidoPaterno, apellidoMaterno, nombre' ); while ( ($row = mysql_fetch_array ( $results )) != FALSE ) { echo <<<EOL <tr><td>{$row[0]}</td><td>{$row[1]}</td><td>{$row[2]}</td></tr> EOL; } ?> </table>

Page 8: sesión 21 - capa abstracción base de datos

Capa de abstracción de base de datos Así podemos tener cientos de archivos que se

conecten a la base de datos Si las credenciales de acceso a la base de datos

cambian, solo cambiamos 1 archivo

Pero ¿qué pasa con la última interrogante? O peor aún… Tuviéramos que migrar la aplicación para que use otro

SGBD

Para esto empleamos una capa de abstracción de base de datos

Page 9: sesión 21 - capa abstracción base de datos

Capa de abstracción de base de datos En general, una capa de abstracción

es una forma de ocultar los detalles de implementación de ciertas funcionalidades

El modelo más conocido es el Modelo OSI de 7 capas

consiste en aislar un elemento de su contexto o del resto de los elementos que lo acompañan

se refiere al énfasis en el "¿qué hace?" más que en el "¿cómo lo hace?" (característica de caja negra)

Page 10: sesión 21 - capa abstracción base de datos

Capa de abstracción de base de datos Ejemplos de capas de abstracción de base de

datos ODBC (Open DataBase Connectivity) Su objetivo es hacer posible el acceder a cualquier

dato desde cualquier aplicación, sin importar qué Sistema Gestor de Bases de Datos

el propósito de esta capa es traducir las consultas de datos de la aplicación en comandos que el DBMS entienda

Page 11: sesión 21 - capa abstracción base de datos

Capa de abstracción de base de datos

JDBC (Java Database Connectivity) permite la ejecución de operaciones sobre bases de

datos desde el lenguaje de programación Java independientemente del sistema operativo donde se

ejecute o de la base de datos a la cual se accede ADODB conjunto de bibliotecas de bases de datos para PHP y

Python la base de datos puede cambiar sin necesidad de

reescribir cada llamada a la base de datos realizada por la aplicación

Page 12: sesión 21 - capa abstracción base de datos

Capa de abstracción de base de datos

SGBD

MySQL Access Oracle …

Abstracción de base de datos

ODBC JDBC ADODB

Aplicación

Java PHP C# …

Page 13: sesión 21 - capa abstracción base de datos

Capa de abstracción de base de datos En lo que concierne a nuestra aplicación,

emplearemos ADODB Se puede descargar desde

http://adodb.sourceforge.net/ Procederemos a colocar la librería dentro de

nuestro directorio de la aplicación Modificaremos el archivo bootstrap de la

siguiente forma:

Page 14: sesión 21 - capa abstracción base de datos

Capa de abstracción de base de datos <?php require_once 'adodb5/adodb.inc.php'; $server = 'localhost'; $user = 'bda'; $pwd = 'bda'; $dbname = 'bda'; $db = NewADOConnection('mysql'); $db->connect($server, $user, $pwd, $dbname); ?>

Page 15: sesión 21 - capa abstracción base de datos

Capa de abstracción de base de datos

También tendremos que cambiar el código del archivo principal para que emplee ADODB

Page 16: sesión 21 - capa abstracción base de datos

Capa de abstracción de base de datos <?php require_once 'bootstrap.php'; ?> <html> <body> <table border="1" cellpadding="3" cellspacing="1"> <tr> <td>Nombre</td> <td>Paterno</td> <td>Materno</td> </tr> <?php $results = $db->Execute ( 'select nombre, apellidoPaterno, apellidoMaterno from alumnos order by apellidoPaterno, apellidoMaterno, nombre' ); foreach ($results as $row) { //solo posible con PHP5, con PHP4 habria que usar $results->FetchRow() echo <<<EOL <tr><td>{$row[0]}</td><td>{$row[1]}</td><td>{$row[2]}</td></tr> EOL; } ?> </table>

Page 17: sesión 21 - capa abstracción base de datos

Capa de abstracción de base de datos Con lo anterior ya implementamos una capa de

abstracción de base de datos Si necesitaramos migrar nuestra aplicación a otro

SGBD, solo tendriamos que cambiar el argumento del comando $db = NewADOConnection(); en nuestro archivo bootstrap

La lista completa de SGBD soportadas por ADODB está en http://phplens.com/adodb/supported.databases.html

Page 18: sesión 21 - capa abstracción base de datos

Capa de abstracción de base de datos

Aún con la capa de abstracción

implementada, nuestra aplicación aún mezcla la capa de negocio con la capa de presentación

Podemos hacer una separación rudimentaria de la siguiente forma:

Page 19: sesión 21 - capa abstracción base de datos

Capa de abstracción de base de datos <?php require_once 'bootstrap.php'; $query = " SELECT nombre, apellidoPaterno, apellidoMaterno FROM alumnos ORDER BY apellidoPaterno, apellidoMaterno, nombre "; $results = $db->GetAll ( $query ); ?> <html> <body> <table border="1" cellpadding="3" cellspacing="1"> <tr> <td>Nombre</td> <td>Paterno</td> <td>Materno</td> </tr> <?php foreach ( $results as $row ) { echo <<<EOL <tr><td>{$row[0]}</td><td>{$row[1]}</td><td>{$row[2]}</td></tr> EOL; } ?> </table>

Page 20: sesión 21 - capa abstracción base de datos

Capa de abstracción de base de datos

O mejor aún, podemos crear una clase que se encargue de administrar el acceso a los datos de la tabla de alumnos:

Page 21: sesión 21 - capa abstracción base de datos

Capa de abstracción de base de datos

<?php class Alumno {

private $db; public function __construct($db) {

$this->db = $db; } public function getAlumnos() {

$query = " SELECT nombre, apellidoPaterno, apellidoMaterno FROM alumnos ORDER BY apellidoPaterno, apellidoMaterno, nombre "; $results = $this->db->GetAll ( $query ); return $results;

} } ?>

Page 22: sesión 21 - capa abstracción base de datos

Capa de abstracción de base de datos

Nuestro archivo principal quedaría de la siguiente forma, ya con mejor separación de la capa de negocios de la de presentación

Page 23: sesión 21 - capa abstracción base de datos

Capa de abstracción de base de datos <?php require_once 'bootstrap.php'; require_once 'Alumno.php'; $alumno = new Alumno($db); $results = $alumno->getAlumnos(); ?> <html> <body> <table border="1" cellpadding="3" cellspacing="1"> <tr> <td>Nombre</td> <td>Paterno</td> <td>Materno</td> </tr> <?php foreach ( $results as $row ) {

echo <<<EOL <tr><td>{$row[0]}</td><td>{$row[1]}</td><td>{$row[2]}</td></tr> EOL;

} ?> </table>

Page 24: sesión 21 - capa abstracción base de datos

Capa de abstracción de base de datos El concepto de crear una clase que se

dedique a administrar el acceso a la información de una tabla dentro de una base de datos se le conoce como Object Relation Mapping (ORM)

En las siguientes sesiones veremos como implementar correctamente el concepto de ORM y sus ventajas

Page 25: sesión 21 - capa abstracción base de datos

© 2011 Creative Commons Atribución-NoComercial-Compartir Igual 2.5 México. http://creativecommons.org/licenses/by-nc-sa/2.5/mx/

Ing. Miguel Angel Ibarra Romero