sesión 21 - capa abstracción base de datos
-
Upload
miguel-ibarra -
Category
Documents
-
view
415 -
download
4
Transcript of sesión 21 - capa abstracción base de datos
BASES DE DATOS AVANZADAS Sesión 21 – Capa de abstracción de 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>
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
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
Capa de abstracción de base de datos
Boo
tsra
p
Index.php
Altausuario.php
Busquedausuario.php
Archivo4.php
archivo[n].php
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' ); ?>
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>
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
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)
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
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
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# …
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:
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); ?>
Capa de abstracción de base de datos
También tendremos que cambiar el código del archivo principal para que emplee ADODB
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>
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
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:
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>
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:
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;
} } ?>
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
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>
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
© 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