PDA

Ver la Versión Completa : Empezando con DataSnap: dudas


Voutarks
26-09-2003, 13:22:40
Estoy empezando a echar un vistazo a DataSnap y tengo algunas dudas. El escenario es el siguiente: Servidor con base de datos Firebird 1.5 RC6 y clientes remotos (en otra ciudad).

Después de mirar bien la version de prueba de los componentes IBObjects los he dejado y ahora estoy probando con FIBPlus, que son más sencillos. Y aqui van las preguntas:

--¿Hasta dónde me puede ayudar el desarrollo de aplicaciones en tres capas, es decir, que ventajas ofrece, me darán un aumento en el rendimiento, velocidad o en otros aspectos sobre la aruitectura clásica cliente/servidor en dos capas?

--Me gusta manejar explícitamente las transacciones, ya se que en Ib/Fb no hay tanto problema en dejar transacciones abiertas durante cierto tiempo debido a su arquitectura MGA pero aún así prefiero ir abriendo y cerrando inmediantamente yo las transacciones, mo me fío del manejo implícito de los componentes. Ahora echando un vistazo a DataSnap me encuentro un poco perdido, ya que son muchos clientes interactuando con un solo programa servidor de aplicaciones. ¿Cómo funciona este tema? ¿seguiré pudiendo manejar yo todas las transaciones? ¿las transacciones se quedan abiertas con este sistema?

-- Por otra parte quisiera saber si para la utilización de DataSnap, debido a su arquitectura, es más conveniente utilizar dbexpress que, por ejemplo FIBPlus.

Se que son muchas preguntas, pero son las dudas que ahora mismo rondan sobre mi.

Muchas gracias de antemano.

Voutarks
02-10-2003, 21:05:33
um, ¿nadie tiene nada que decir sobre el rendimiento de DataSnap (TDataSetProvider, TClientDataSet, ...)?

guillotmarc
02-10-2003, 22:31:02
Hola.

Aunque no uso datamodules remotos, si que uso dbExpress que utiliza también intensivamente los clientdatasets, así que intentaré dar respuesta a alguna de tus preguntas :

El desarrollo en tres capas, te ayuda sobretodo en que puedes ubicar gran parte de la lógica del programa (las llamadas reglas de negocio) en la capa intermedia. Un ejemplo : supón que cuando haces una venta tienes que rebajar stocks en los productos relacionados, esto lo puedes programar en la capa intermedia. Si las reglas de negocio cambian en el futuro, es decir además de rebajar los stocks, quieres mantener en una tabla un registro de las salidas de stock, solo tienes que tocar la capa intermedia, no tienes que modificar la aplicación de usuario.

La programación en 3 capas permite que la aplicación de usuario sea más ligera : gran parte de la codificación está en la capa intermedia, no tiene que acceder a la base de datos, solo tiene que acceder a la capa intermedia (te ahorras instalar el cliente de la base de datos, y configurar el motor de acceso si lo usabas : BDE, ADO, ...), de esta forma puedes conseguir que la aplicación del cliente funcione solamente con el ejecutable (sin ninguna librería ni instalación).

Sobre las transacciones, DataSnap creará transacciones implícitas si ve que no hay ninguna transacción abierta (si hay una transacción abierta la usará). Por eso puedes manejar personalmente las transacciones y abrirlas y cerrarlas cuando te interese. Desconozco que ocurrirá con los usuarios simultaneos al econtrar abierta una transacción por otro usuario.

Por defecto en DataSnap nunca quedan abiertas transacciones. Cada vez que se realiza una operación (abrir una consulta, aplicar los cambios de un clientdataset, ...) se abre automaticamente una transacción y se cierra immediatamente después (aunque el usuario tenga en pantalla los datos de la consulta abiertos, cuando quiera aplicar cambios se generará otra transacción). Unicamente tendrás transacciones abiertas cuando lo hagas manualmente.

NOTA : Esto es así en conexiones con ClientDataSets de forma local, en conexiones remotas no conozco el comportamiento de las transacciones abiertas manualmente.

Sobre utilizar dbExpress o FibPlus, es totalmente indiferente. Vas a desaprovechar la mayoría de las características de FibPlus al aplicarlo sobre un ClientDataSet (no se usarán los cursores modificables, bidireccionales, cached updates, eventos, ...), pero puedes hacerlo perfectamente, y funcionará igual de bien que con dbExpress (el cual solamente proporciona las características imprescindibles que necesita el clientdataset).

NOTA : Si vas a usar dbExpress con Firebird 1.5 es aconsejable hacerlo con el driver de www.upscene.com puesto que es específico para Firebird (en cambio con el de Borland tarde o temprano acabarás encontrando incompatibilidades).

El mejor libro que conozco que trata este tema es el La Cara Oculta de Delphi 6 de Ian Marteens (no hay versión para Delphi 7 porqué el autor considera que los cambios en la nueva versión són mínimos). www.marteens.com Allí podrás encontrar mucha má información sobre los problemas que aparecerán por la concurrencia de usuarios.

Saludos.

Voutarks
02-10-2003, 23:46:00
Muchas gracias por tu respuesta Marc, haré algunas pruebas de desarrollo en tres capas en red (VPN) a ver qué tal va.

Si dices que DataSnap abre y cierra siempre las transacciones, sin dejarlas abiertas, entonces creo que será mejor no meter mano personalmente en eso, se lo dejaremos a los componentes solitos.