Programación en tres capas
Tengo una pregunta que hacerte sobre programación: ¿Cómo se pasa información de una base de datos entre tres capas?, Te comento, mi aplicación cliente tiene que mostrar datos en un formulario, pero estos datos son un conjunto de datos, te pongo un ejemplo: "todos los nombres de mi agenda que empiezan por A". Antes de dividir el programa en tres capas, yo lo que hacía era ejecutar una sentencia SQL a una tabla que me diese las filas en un Recordset, y luego navegaba en ese Recordset que estaba abierto como sólo lectura, pero lo tenía que tener abierto hasta que el usuario cerrase la interfaz.
Ahora tengo creado un módulo de acceso a datos y otro de gestión empresarial. En el módulo de acceso a datos yo tengo una función (método) que crea un Recordset y ejecuta una sentencia SQL sobre él y lo llena, pero si lo cierro lo pierdo, por ello lo que hago es clonarlo a un recordset pasado como parámetro, después cierro el recordset antes de terminar la función. Como a éste método lo llamo desde el módulo de gestión empresarial, es aquí donde estará definido el recordset pasado como parámetro. ¿Cómo paso toda la información desde aquí a la interfaz? ¿Sigo pasando el recordset como parámetro a la interfaz?
La verdad es que se me ocurre que si mantengo el Recordset pasando de una capa a otra (aunque sea clonando), estará abierto ¿no? Eso supongo no me da independencia o ¿es así como se hace?.
Como otra opción creé un tipo de dato registro definido por mi para pasarlo como parámetro, si tengo que pasar un grupo de filas, cada fila irá en uno de estos registros ¿debo declararme un array de registros y pasarlo por parámetro? Esta sería la solución que me da independencia de la base de datos pero ¿no consume demasiada memoria?. Con esta opción los pasos a realizar creo que serían los siguientes:
Componente acceso a datos
Abro conexión a BD
Abro tabla y ejecuto SQL sobre Recordset
Lleno un array de registros (pasado por referencia) de ese Recordset (si es uno como si son mil)
Cierro Recordset
Cierro conexión (y con ello la tabla)
Componente gestión de empresa
Hago lo que estime oportuno con el array de registros
Interfaz
Visualizo cada posición del array cada vez que haga click en un botón.
¿Cuál es mejor de las dos?
¿No hay otra manera mejor de solucionar esto?
Ahora tengo creado un módulo de acceso a datos y otro de gestión empresarial. En el módulo de acceso a datos yo tengo una función (método) que crea un Recordset y ejecuta una sentencia SQL sobre él y lo llena, pero si lo cierro lo pierdo, por ello lo que hago es clonarlo a un recordset pasado como parámetro, después cierro el recordset antes de terminar la función. Como a éste método lo llamo desde el módulo de gestión empresarial, es aquí donde estará definido el recordset pasado como parámetro. ¿Cómo paso toda la información desde aquí a la interfaz? ¿Sigo pasando el recordset como parámetro a la interfaz?
La verdad es que se me ocurre que si mantengo el Recordset pasando de una capa a otra (aunque sea clonando), estará abierto ¿no? Eso supongo no me da independencia o ¿es así como se hace?.
Como otra opción creé un tipo de dato registro definido por mi para pasarlo como parámetro, si tengo que pasar un grupo de filas, cada fila irá en uno de estos registros ¿debo declararme un array de registros y pasarlo por parámetro? Esta sería la solución que me da independencia de la base de datos pero ¿no consume demasiada memoria?. Con esta opción los pasos a realizar creo que serían los siguientes:
Componente acceso a datos
Abro conexión a BD
Abro tabla y ejecuto SQL sobre Recordset
Lleno un array de registros (pasado por referencia) de ese Recordset (si es uno como si son mil)
Cierro Recordset
Cierro conexión (y con ello la tabla)
Componente gestión de empresa
Hago lo que estime oportuno con el array de registros
Interfaz
Visualizo cada posición del array cada vez que haga click en un botón.
¿Cuál es mejor de las dos?
¿No hay otra manera mejor de solucionar esto?
1 respuesta
Respuesta de denciso
1