[AYUDA]Aprovechar la POO en Bases de Datos

Iniciado por Skeletron, 14 Octubre 2009, 03:20 AM

0 Miembros y 1 Visitante están viendo este tema.

Skeletron

Hola gente..
Resulta que por ahí en algun post del foro, me recomendaron utiliar la POO de vb.net para realziar las conexiones con la base de datos..

Yo pensaba recien, y hacer una clase que reciba por parametros unos valores, de nombre de tabla, columnas y datos y con eso ya puedo hacer sencillamente una clase que se OCUPE del INSERT.. otra (o tal vez en la misma) para le UPDATE y otra (o tal vez en la misma) para el DELETE...

Bien.. Me gustaria que me recomienden que hacer.. si hacer 1 clase para TODA la conexión con la database, o 1 por cada sentencie (INSERT, UPDATE.. etc) o 1 clase por tabla (ésto me recomendaron.. aunque no lo veo como codigo REUTILIZABLE)

Pero, tambien está la 2º pregunta:
El metodo SELECT.. no sería BASTANTE dificil de hacer??

seba123neo

Hola, tenes que crear clases para cada entidad, por ejemplo, tenes la entidad llamada "cliente", haces una clase que gestione todo lo que sea cliente. que tenga un metodo para hacer el INSERT, otro para el UPDATE, otro para DELETE...etc...creas las propiedades de la clase...como nombre, calle, direccion, telefono..etc.si tenes que hacer algo referido al cliente lo creas tambien ahi en esa clase.

y 3 capas es eso...la primera capa se encarga de la conexion de la base de datos y de las ejecuciones de comandos, consultas, transacciones...la segunda es la que te dije arriba, que para ejeuctar algo llama a la primera.y la tercera que seria donde programas la interfaz, llamas ahi a la segunda capa, que seria las clases.

no entendi la segunda pregunta...si sabes SQL un poco no es dificil..aparte internet esta lleno de ejemplos.

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

Skeletron

Claro, por ejemplo, mi "programa" trabaja con "Caja, Produccion, Compra y Ventas"

En Caja, trabajo con una tabla llamada: "Movimientos"
Cada "entrada" de la tabla, tiene algunos datos como por ejemplo: El dia que se hizo un retiro o deposito de dinero, la cantidad, el PORQUE, el tipo de Factura (factura A, B, C.. etc) el ID de la factura.. y QUIEN lo hizo..

Yo "juego" con esa tabla, desde los "usuarios" (empleados) que acda vez que sacan o depositan dinero, tienen que aclarar todos esos datos... (INSERTS) y tambien desde la sesion CAJA, que puedo ver todos esos datos para sacar el calculo de la cantidad de dinero total (SELECTS)

Cuanto te refieres a programacion en 3 capas, sería algo así:?
1º Capa: Todos los codigos de INSERT, UPDATE, BORRADO, y SELECT (1 clase llamada MOVIMIENTOS, donde tengo metodos que se encargan de esas 4 cosas)

2º Capa: Sería la capa "comun" donde se desarrolla todo el programa??.. o sea, la capa donde se Instanciaria la clase MOVIMIENTOS, se le pasaria los datos por parametros, y se "llevarian a cabo las transacciones de INSERT; Upda.. etc)

3º Capa: Sería la GUI.. la interface de USUARIO??? O sea.. ventanitas, botones y bla bla bla... o no??

Sabes porque te pregunto con "CAUTELA" ésto?, porque en mi facultad, hablan mucho de CAPAS cuando hablan de HERENCIA, y esas cosas.. la relacion entre clases..

En cuanto a la 2º pregunta, me referia a éste ejemplo:
Si yo quiero analizar los movimientos que hubieron desde X fecha, hasta X fecha, tendria que pasar por parametro esas 2 fechas, y el SELECT, me devolvería los datos.. pero esos datos son MUCHOS.. (viste que apra leer todos los datos que devuelve la base de datos, hay que hacer un WHILE).. bueno.. teniendo en cuenta que devolverá muchos datos, no podria tomar (facilmente) esos datos como un "RESULTADO DEL METODO".. sino que tendria que vincular (por ejemplo) al LISTVIEW con ese Objeto "MOVIMIENTOS" (donde realizo el SELECT), o sea, pasar los datos de X y X fecha y tambien una VINCULACION al LISTVIEW.. O me equivoco?? Sino como mostraria cada item que devuelve el SELECT en algun LISTVIEW??

Te aclaro nuevamente, SOY NOVATO en VB.Net... tenme un poco de paciencia..
A lo mejor eso de nviar por parametros un "LISTVIEW" te parecerá tonto, (talvez no), pero en JAVA (lo que mas he programado, por la facultad), si quiero que un Objeto (un HILO por ejemplo), escriba en un TEXTAREA, tengo que enviarle el textarea por parametro, para que pueda interactuar con ese "elemento de la gui"
En vb-net es necesario eso?

seba123neo

#3
Cita de: Skeletron en 14 Octubre 2009, 04:06 AM

Cuanto te refieres a programacion en 3 capas, sería algo así:?
1º Capa: Todos los codigos de INSERT, UPDATE, BORRADO, y SELECT (1 clase llamada MOVIMIENTOS, donde tengo metodos que se encargan de esas 4 cosas)

2º Capa: Sería la capa "comun" donde se desarrolla todo el programa??.. o sea, la capa donde se Instanciaria la clase MOVIMIENTOS, se le pasaria los datos por parametros, y se "llevarian a cabo las transacciones de INSERT; Upda.. etc)

3º Capa: Sería la GUI.. la interface de USUARIO??? O sea.. ventanitas, botones y bla bla bla... o no??

en la primera capa(o capa de Datos) no van los select, en esa capa conectas a la base, te creas un metodo llamado conectar y ahi pones la conexion , creas otro que sea desconcetar..etc...y tambien los metodos para ejecutar comandos y consultas.para ejecutar comandos debes crearte un metodo que ejecute un comando(INSERT,UPDATE,DELETE) y te devuelva los que fueron afectados, este metodo obviamente recibe como parametro la "cadena" del comando (INSERT INTO...blabla).el metodo para la consulta lo mismo pero que te devuelva un datareader y que reciba como parametro tambien la consulta a ejecutar (SELECT * FROM Tabla...).

en la segunda capa(Negocio) va lo que te dije antes...supongamos que tenes la entidad "cliente" , entonces creas las propiedades de este cliente(que serian los campos) direccion, telefono..etc.aca creas los metodos para insertar, updatear, borrar, consultar, etc...

en la tercer capa o de interfaz llamas a los metodos de la segunda...supongmaos que queres cargar todos los clientes en un listview...en la segunda capa debes tener creado un metodo que te devuelva un datareader...y llamas algo asi desde un boton por ejemplo:

Código (vbnet) [Seleccionar]
Dim drClientes As SQLDatareader = oCliente.DevolverClientes

donde "DevolverClientes" es un metodo que me devuelve un datareader que en la segunda capa hace un "SELECT * FROM CLIENTES" por ejemplo...y para cargarlo al listview recorres el drClientes como ya sabes...

otra cosa que hago es instanciar todas las clases desde el Main de un modulo, y asi cuando queiro usar una clase no necesitas declararla mas, usas el objeto que declaraste en el main como publico y lo usas donde quieras.

en cuanto a lo de Hilos aca te dice lo simple que es:

Threads en VB.NET

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

Skeletron

Y cual es el "porque" de complicar todo tanto, si ya tengo algo como ésto:
Código (vbnet) [Seleccionar]
        Dim SQLconnect As New SQLite.SQLiteConnection()
        Dim SQLcommand As SQLiteCommand
        SQLconnect.ConnectionString = "Data Source=C:/asdasdasd/asdasdasd/asd.db3;"
        SQLconnect.Open()
        SQLcommand = SQLconnect.CreateCommand
        'Insert Record into Foo
        SQLcommand.CommandText = "INSERT INTO xxxxxx (title, description) VALUES ('This is a title', 'This is a Description')"
        'Update Last Created Record in Foo
        SQLcommand.CommandText = "UPDATE foo SET title = 'New Title', description = 'New Description' WHERE id = last_insert_rowid()"
        'Delete Last Created Record from Foo
        SQLcommand.CommandText = "DELETE FROM foo WHERE id = last_insert_rowid()"
        SQLcommand.ExecuteNonQuery()
        SQLcommand.Dispose()
        SQLconnect.Close()
    End If


(creí que lo habia mencionado)
Que me haría mas facil el temita...
No sería mejor manupular eso para dejarlo solo en 1 clase (con las 3 sentencias separadas) y utilizar objetos de esa clase???

seba123neo

#5
Cita de: Skeletron en 14 Octubre 2009, 05:52 AM
Y cual es el "porque" de complicar todo tanto

preguntale a los que inventaron las 3 capas :P, se puede programar sin ella tranquilamente...pero si podes hacerlo (que seria lo maximo) hacelo...y despues no te vas a arrepentir.

si, lo podes dejar en una clase y hacer todo desde ahi, pero ya no seria 3 capas y seria como por decirte un ejemplo como hacerlo en visual basic 6...vas a tenr que estar abriendo comandos y cerrando a lo loco cada vez que queres hacer algo, mientras que en las 3 capas no lo tendrias que hacer, porque la priemra capa ya se encarga de eso...o sea quiero que entiendas que esto de las capas es para simplificar el codigo que va en cada lado y despues ayuda muchisimo a la hora de mantenerlo.

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

Skeletron

Claro.. Entiendo...
Capaz que para un programa sencillito como el que estoy haciendo, no sea tan necesario esas 3 capas.. hago los INSERT, y SELECT super sencillos..