You are on page 1of 25

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
Index.php

Bootsrap
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
Aplicación

Java PHP C# …

Abstracción de base de datos

ODBC JDBC ADODB

SGBD

MySQL Access Oracle …


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.ht
ml
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
Ing. Miguel Angel Ibarra Romero
© 2011 Creative Commons Atribución-
NoComercial-Compartir Igual 2.5 México.
http://creativecommons.org/licenses/by-nc-
sa/2.5/mx/

You might also like