3. DISEÑOS E IMPLEMENTACIONES
3.2 Diseño en POO de la aplicación
3.2.2 Diseño de la capa de Datos
La aplicación ReferenciasBibliográficas necesita realizar muchas operaciones contra la BBDD. Desde la inclusión de bibliografía nueva, la edición de los datos, la creación de proyectos nuevos y el posterior relación de bibliografía con él hasta el
mantenimiento de tablas maestras, todo pasa por una operación de base de datos. Existen cuatro operaciones básicas: Consulta, inserción, edición, borrado. Todo ello se realizará en esta parte del código. Para incluir todos los archivos que formarán la capa de datos se define el “Namespace” DAL.
La clase CDAL es la clase que se encarga de todo lo enunciado en el párrafo anterior. Para poder funcionar debe incluir los espacios de nombre System.Data y System.Data.OleDb. Esta clase contará con las siguientes propiedades:
• m_conn_str: Propiedad privadas de tipo string que guardará la ruta donde está la BBDD. Esta aplicación usa una base de datos de MS Access, con lo cual ahí se guardará un texto de formato
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=<ruta de la BBDD>".
• m_transaccion: Propiedad protegida de tipo OleDbTransaction que se ocupa del caso en que se necesite ejecutar operaciones de BBDD de forma
transaccional. Estos casos son en los que para realizar una operación se necesita que todas las suboperaciones que conlleva se ejecuten todas o ninguna, y si alguna falla se anulen todas ellas. Esta propiedad nos proporciona lo necesario para conseguirlo.
• m_connection: Propiedad protegida de tipo OleDbConnection que contiene una conexión a BBDD. A esta conexión habrá que indicarle la
“ConnectionString” definida anteriormente, m_conn_str. Esta clase es a través
de la que se realizan todas las operaciones de BBDD. La clase CDAL incluye los siguientes métodos:
• LeerConfiguracionBBDD: Es un método privado que va a leer el archivo de configuración “config.xml”. Este archivo contiene la ruta y el tipo de motor de
BBDD. Dentro de la etiqueta <app> se encuentra otra etiqueta denominada config_bbdd que incluye dos parámetros: provider y dataSource. Este método es capaz de obtener la cadena de conexión a partir del archivo xml y
devolverla en un “string”.
• ComenzarTransaccion: Es un método público que la clase ofrece para indicar que va a empezar una transacción.
• HacerCommit: Es un método público que la clase ofrece para indicar que la transacción ha finalizado y que todo ha salido bien.
• HacerRollback: Es un método público que la clase ofrece para indicar que alguna de las operaciones de la transacción ha salido mal y hay que echar para atrás todo el proceso.
• ProbarConexion: Es un método público que la clase ofrece para informar a quien la usa el estado de la conexión a BBDD. Si la conexión está activa devolverá un “true”, en caso contrario devolverá “false”.
La clase también ofrece métodos protegidos para que las clases que hereden de ella las usen para ejecutar alguna “query” en la BBDD, construir alguna “query” o
interpretar un valor:
• EjecutarSelect: Método que ejecuta una “query” que contiene una select y
devuelve en un DataReader el resultado. Es necesario que está configurada la conexión.
• EjecutarSelectReader: Método que ejecuta una “query” que contiene una
select y que espera un resultado muy grande: un archivo, un binario….
• EjecutarEscalar: Método que ejecuta una “query” en que se espera sea
devuelto sólo un número.
• Insertar: Método que ejecuta una “query” que contiene una operación de
inserción en BBDD. La “query” se pasa como parámetro. Si el parámetro
“booleano” devolverIDNuevo está a true la función devolverá el ID de la nueva inserción que se ha generado automáticamente; si está a false la función devolverá el nº de registros a los que ha afectado la operación. El método da la opción de poder pasarle valores como “OleDbParameter” por si es
necesario, como en el caso de pasar valores que son binarios o muy grandes.
• EjecutarQueryGeneral: Es un método que sirve para ejecutar cualquier otra
“query”que no sea una inserción o una consulta: modificación o borrado.
También da la opción de pasar parámetros como “OleDbParameter”.
Una vez desarrollada la clase CDAL, para cada tipo que existe, que a su vez está basado en las entidades de la BBDD existirá una clase que se llamará igual que el tipo seguido de la partícula DAL. Todas estas clases heredan de la clase CDAL e incluyen todas las operaciones de BBDD sobre ese tipo que la aplicación requiera. Aunque cada tipo de datos tiene alguna operación propia que sólo se realiza para él todas las clases constarán de ciertos métodos que se repetirán para todos.
• CargaTodos: Un método que hace una select en que pide todos los registros disponibles. Se devolverán en una List de ese tipo.
• Insertar: Un método que recibe un objeto de la clase con que se está trabajando y tiene que insertarlo en BBDD.
• Borrar: Un método que a partir de un ID borra de la base de datos el registro correspondiente.
• Modificar: Un método que modifica un registro con información nueva.
• CargaObjetoDeDataRow: Se ha diseñado un método que rellene el objeto con la información contenida en el “DataRow” que devuelve el método que
realiza la “Select”. Esto obliga a poner un “alias” a todos los datos que se
extraen de la BBDD y que sean siempre igual.