Mi Wrapper SQL QueryExecutor

¿Por que un Wrapper SQL?

Estoy desarrollando un Wrapper SQL, ya que la verdad se me hace demasiado aburrido tener que estar haciendo la conexión a la base de datos cada que quiero hacer una consulta, aparte de que al trabajar con programación orientada a objetos necesito hacer una consulta para construir los objetos y por lo general, los objetos encapsulan otros objetos y es demasiado tedioso estar haciéndolo cada ves.

Antes recurrí a hacer una función que me regresara una conexión nueva cada ves que la llamaba, pero seguía teniendo el problema de estar abriendo y cerrando la conexión, aparte de que debía extraer los datos devueltos por la consulta antes de cerrar la conexión.

Así que un día, aburrido de esta tarea tan tediosa, dije:

“Sería genial que con solo pasar el query me devolviera el resultado sin necesidad de preocuparme de la conexión… y ya de paso me devolviera los objetos construidos.”

Así que empecé con esta nueva aventura, ya desde ahora les comento que esta desarrollada muy a mis propias necesidades y forma de programar, tal ves les sirva o deban acoplar alguna parte del código.

Requerimientos

  • Todas las tablas deben tener llave primaria
  • Las tablas deben tener 1 solo campo como llave primaria
  • Los nombres de las tablas solo deben tener letras
  • Los nombres de las clases (modelo) deben tener el mismo nombre de la tabla (Pueden usarse mayúsculas, siempre que el nombre de la clase sea el mismo de la tabla)

Funcionamiento

  • Se crea un objeto QueryExecutor único para la aplicación con los parámetros de conexión a la base de datos.
  • Se conecta a la base de datos
  • Se obtienen los detalles de las tablas, para que los modelos puedan hacer inserts y updates en la base de datos
    • Nombre de las columnas
    • Llave primaria
  • Con una sola consulta se crea el modelo

Diagrama Clases

Falta pulir algunas cosas más ya que esta es una versión anterior a la que aún no le agregaba otras características, pero a modo general estas son las clases que utiliza.

Repositorio de GitHub

Ejemplos

Ejemplo Simple de Modelo

Insert con Modelos

Update con Modelos

Como se puede apreciar este concepto tiene la ventaja de que no hace falta agregar o eliminar propiedades de los modelos, con solo modificar la consulta SQL basta para cambiar la información que contendrá el modelo, para tablas que son más bien catálagos un simple select es suficiente, pero para los modelos puede ser que se necesite una consulta más compleja, pero eso no importa, igual la soporta, aquí les dejo un ejemplo del modelo de un producto donde requerí una consulta más elaborada.

 

a

2 thoughts on “Mi Wrapper SQL QueryExecutor

  1. ¿Y no es mejor usar un ORM (como el Entity Framework)? si no te gusta que genere las entidades las puedes hacer a mano y no dependes de un motor sql específico. Ya de paso puedes utilizar Linq para las querys con la gran ventaja de que todo está fuertemente tipado.

    1. Si lo pensé, pero la verdad es que mi necesidad era mucho más específica, por facilidad necesitaba que los objetos guardaran sus atributos en un Dictionary, de este modo no tengo necesidad de declarar nada en la clase, y si modificaba la BD con solo agregar el campo nuevo al query el objeto ya tendría ese campo también. Y en el código solo usaba miObjecto[“atributo”] y ya tenia acceso al valor que necesitaba; ya que el proyecto donde lo usé esta en constante actualización y no deseaba entretenerme en agregar sus atributos, así que esta forma me ayudó bastante, aunque he de reconocer que tengo mucho código “basura” ya que después de unos días vi que realmente no necesito tantas clases y pude haberme ahorrado bastante código y obtendría el mismo resultado, pero si me ayudó bastante para no tener que construir a mano los objetos, solo hacía la consulta y por cada renglón en el resultado se construía un objeto.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

5 × = 35