sábado, 11 de junio de 2011

DataSnap, algunos pensamientos

Quiero compartir algunos pensamientos sobre DataSnap, quiero hacerlo a modo de introducción sobre algunos artículos que quiero publicar sobre tópicos avanzados. Existe numerosa información sobre los primeros pasos, si aun no sabes lo que es DataSnap puedes empezar por aquí :

  1. Excelente documento donde Bob Swart nos da una buena revisión de DataSnap http://www.embarcadero.com/images/dm/technical-papers/delphi-2010-wp-datasnap-091016.pdf
  2. Si prefieres en Español pueden descargar el video de Jose Castillo sobre DataSnap http://edn.embarcadero.com/es/article/40336. (Aparentemente requiere login en EDN)


Creo que DataSnap, al menos en la actualidad, es una gran tecnología de desarrollo multicapa. Yo la estoy utilizando hace solo 2 o 3 años, anteriormente si bien había escuchado de la tecnología no la tenia muy en cuenta por varias razones
  1. Suponía un modelo de comunicación basado en COM/DCOM etc, elementos de MS que yo no domino totalmente y que las experiencias que había tenido con estas tecnologías fueron frustrantes. Esta suposición miá era parcialmente cierta
  2. Suponía a DataSnap directamente relacionado con desarrollo de software del tipo administrativo/comercial, ERP, CRM etc. Este tipo de desarrollo no son mi especialidad y mi orientación al software de tiempo real, o sistemas de bajo nivel me alejaban de DataSnap. Esta suposición hoy no tiene sentido y en el pasado algunas mediciones podrían haber demostrado si estaba en lo cierto o no pero me inclino a pensar que mi suposición fue prejuiciosa

En cualquier caso es una opción saludable en muchos escenarios, uno de sus puntos mas fuertes es la productividad, la interfaz IappServer puede hacer mucho por nosotros.
En desarrollos del tipo administrativo/comercial la sobrecarga de trabajo usando DataSnap es realmente muy baja ganando todas las ventajas del desarrollo multicapa. En el caso de aplicaciones/servicios de tiempo real se pueden evitar muchos dolores de cabeza dejando que DataSnap se ocupe de los detalles TCP/IP, transferencia, paquetes, protocolo, cifrado, logueo, compresión etc.

¿Porque mejor no usar webservices?
Bueno, personalmente soy un fiel adepto a los webservices, tanto en Delphi como en .NET según el caso. Creo que en muchos escenarios la opción webservices es la mas recomendable, pero el desarrollo sobre DataSnap tiene algunos ventajas sobre los webservices que quiero recordar.
  • Interfaz IappServer, si estas pensando en desarrollo intensivo sobre bases de datos con DataSnap la productividad crece exponencialmente respecto a los webservices
  • Otro aspecto importante en términos de productividad, el modelo drag and drop de componentes sigue firme en la creación de servidores DataSnap, simplificando y acelerando el desarrollo.
  • Velocidad, la transferencia “Stream” de datasnap lo hace mucho mas eficiente, y , hay que decirlo, mas oscuro. Una de las cosas que mas me gusta de los webservices SOAP es su transferencia XML. Claro, también se puede implementar REST o SOAP sobre datasnap, al menos sobre REST y hasta donde llego perdemos las interfaz IappServer. (Todo no se puede :))

Cuando no usarlo
Primero lo mas obvio, no hay que usar DataSnap cuando es una decisión tecnológicamente irracional, con esto quiero decir, que no se les ocurra transferir audio y video en tiempo real con DataSnap porque los resultados no van a estar a la altura de lo esperado. Resulta lógico, y acá la aclaración, DataSnap trabaja sobre TCP/IP en su modo de mas bajo nivel, adicionalmente se puede montar una capa http. Mas allá que sea parte de los manuales de protocolos de red mi experiencia es que no hay que llegar al extremo de video on-line para ver que TCP/IP para algunas cosas puede ser muy lento. Cuando se necesita comunicación fluida en tiempo real entre n aplicaciones no queda otra que el sencillo UDP, como dijimos audio, video, movimiento o interacción de elementos en tiempo real. Claro, en una aplicación de tipo administrativo los tiempos son otros y no hay tanto apuro, incluso en aplicaciones de tiempo real tampoco hay tanto apuro para informar la mayoría de las cosas, como dijimos todo depende. Claro, sino aplica DataSnap en estos casos, mucho menos aplica la opción webservices.
No hay muchos mas argumento en contra, podríamos agregar que si el servidor DataSnap tiene que interactuar exclusivamente con aplicaciones desarrolladas con herramientas no embarcadero quizá webServices sea una mejor opción, aunque como dijimos, nada impide consumir métodos DataSnap via REST o por otro medio estandar.
En la siguiente entrada quiero meterme con algunos consejos para el desarrollo real en DataSnap, como mencionamos, existen muchos tutoriales y videos sobre los primeros pasos con esta tecnología pero poco se habla sobre algunos temas mas avanzados, quiero hacer foco en eso.

2 comentarios:

  1. como podemos empaquetar un xml para poder usarlo como parametro en DataSnap

    ResponderEliminar
  2. Hola y de antemano gracias por los alcances que me aclaran el panorama con respecto a lo que fue antes MIDAS y ahora datasnap. Pero ojala pudieras explicarme como hacer para que el servidor envie al cliente algun dato. Entiendo que se puede mediante callbacks pero los ejemplos se orientan a mensajeria entre clientes a traves del servidor datasnap, me gustaria ver un ejemplo mas directo como un boton en el mainform del servidor que envie un mensaje a los clientes conectados o a uno especificamente. Como el servidor identifica a los clientes conectados y puede enviarles mensajes. Muchisimas gracias, pues me consideraba senior en delphi (al menos hasta delphi7) pero ahora examinando las nuevas versiones ya no estoy tan seguro de eso. Mi nombre Hernan. gracias.

    ResponderEliminar