sábado, febrero 04, 2012

Aprendiendo RCP (Rich Client Platform) - 1a. Parte

Quiero aprovechar este viejo blog como un sitio para realizar anotaciones a modo de recordatorio, sobre las cosas que me han sido útiles, me interesa aprender o simplemente me divierten.

Este es el primero de una serie de artículos que quiero escribir sobre marcos de desarrollo RCP, temática que me parece importante y que no está siendo suficientemente explotada en nuestro medio local.

Desde hace algún tiempo ya, me ha interesado mucho el tema de RCP o "Rich Client Platform", lo que podría traducirse como "Plataforma de Cliente Rico", o más "concisamente", "Plataforma para el desarrollo de aplicaciones de escritorio" ;-).

Para continuar con este artículo de introducción, voy a tratar de explicar en qué consisten dichos marcos de desarrollo (o frameworks, si prefiere), cuál es su objetivo, qué ventajas nos ofrecen y de cuáles alternativas disponemos.

¿Qué es una plataforma RCP de desarrollo de aplicaciones, para qué sirve y cómo nos ayuda?

Podría decirse que es un entorno completo que maneja el ciclo de vida de una aplicación de escritorio. Esto es importante en cuanto nos provee de mecanismos para controlar aspectos críticos como la interfaz de usuario, la configuración, la modularidad, la actualización y la distribución, dejándonos espacio para concentrar nuestros esfuerzos de desarrollo en lo realmente importante de nuestra aplicación y no en aspectos "triviales" o de "plomería" que generalmente consumen gran parte de nuestro tiempo.

En otras palabras, es una tecnología que nos permite seleccionar el conjunto de componentes y módulos que más nos convenga y a acoplarlos a nuestra funcionalidad particular para lograr construir una aplicación de escritorio completa en una fracción del tiempo estimado, con menor índice de defectos, con interfaces de usuario consistentes e independiente de la plataforma operativa (en la medida de lo posible).

Una característica importante de una plataforma RCP es su arquitectura, ya que es ella la que dicta las normas de construcción y acoplamiento de módulos.

Es importante no confundir RCP con RIA (o Rich Internet Applications), ya que son dos tecnologías diferentes orientadas hacia propósitos distintos: RCP se enfoca en la construcción de aplicaciones de escritorio (que pueden ser desplegadas a través de internet) mientras que RIA se enfoca en aplicaciones ricas de internet, desplegadas en un navegador. Es fácil confundirse, ya que la línea que divide RCP y RIA es muy difusa.

¿Qué alternativas son conocidas?

Dentro de las opciones que conozco para construir aplicaciones de escritorio usando RCP se tienen las siguientes (agrupando por lenguaje de programación):

Para C++
Para este lenguaje, las cosas están bastante complejas y difíciles en este terreno

  • KDevPlatform, es la base del entorno de desarrollo KDevelop y está pensada para ser usada en aplicaciones de este tipo. Provee la infraestructura básica RCP: sistema de módulos, componentes de edición, infraestructura de configuración. Está fundamentada en el framework QT y KDE.
Para C# (.NET)
Aunque para la plataforma .NET no conozco ningún referente (a pesar de que las herramientas de Microsoft utilicen Visual Studio como base), lo más parecido a una plataforma de "fácil" acceso es SODA:
  • SODA - "SharpDevelop Open Development Architecture", es similar al anterior, aunque no es un plataforma RCP per se, su arquitectura permite construir aplicaciones de escritorio usando sus componentes, tal como se puede leer en este documento (en inglés).
  • Aparte de ésta, Microsoft provee una serie de bloques de desarrollo de aplicación, específicamente, el Smart Client Software Factory, que supuestamente provee la arquitectura de una aplicación de escritorio, pero que personalmente no la he explorado en profundidad y no se parece mucho a lo que RCP es.
Para Groovy
Groovy es un lenguaje interpretado que corre sobre la máquina virtual de java, con una sintaxis que permite hacer más con menos código. Por ejecutarse sobre la JVM tiene la característica de poder utilizar funcionalidades sobre otros lenguajes que también corran sobre la JVM, además de poder utilizar artefactos hechos en java.

  • Griffon, es todo un framework completo que facilita la construcción de aplicaciones de escritorio en Groovy; está diseñado siguiendo la filosofía de Grails, es cual es un framework de desarrollo web muy popular, también en este lenguaje.
Para Java
Aquí las cosas están un poco mejor en cuanto a RCP, inclusive, me atrevería a decir que nació o se materializó en este lenguaje (si alguien me puede confirmar o desmentir esto, muchas gracias :-) ).

Una vez que se desarrolló SWING, hubo muchas quejas debido a que no había un marco de prácticas bien estructuradas para construir aplicaciones de escritorio, por lo tanto hubo gran cantidad de proyectos que se enfocaron en facilitar esta labor, me remito a proyectos como el swing application framework, que escaló a JSR-296 e iba a ser incluido en Java 7, pero que fue puesto a dormir indefinidamente.
  • Netbeans Platform, fundamentado en SWING, tiene todo lo que generalmente se usa en las aplicaciones de escritorio, tal como configuración de menú, barras de herramientas, panel acoplable (docking); muy activo, con gran documentación y una gran comunidad detrás de él.
  • Eclipse RCP, igualmente completo al anterior, solo que está basado fundamentalmente en las librerias SWT, que son una alternativa a SWING. Utiliza OSGi como mecanismo de modularidad y extensión; también muy activo, con buena documentación y una comunidad muy grande que lo soporta.
  • Spring Rich Client, iniciado y soportado originalmente por SpringSource, pero está en estado inactivo en el momento. Es mas liviano que los dos anteriores pero no deja de ser una opción interesante para proyectos de corta envergadura que no requieren grandes elementos.
Estas son las alternativas open source que más visibilidad tienen, sin embargo no son las únicas, también a niver comercial hay una serie de marcos de desarrollo de aplicaciones de escritorio con enfoques similares a los mencionados anteriormente.

¿Qué sigue?

Bueno, habiendo hecho una "corta" introducción sobre el tema de RCP, voy a continuar la serie usando "Netbeans Platform" como herramienta por las siguientes razones:
  1. Está hecha en Java, lo que nos permite crear aplicaciones multiplataforma y aprovechar muchos módulos ya construidos. 
  2. Tiene muy buena documentación.
  3. Está basada en Swing, lo que nos permite tener una experiencia de usuario consistente.
  4. Me he enterado de que uno de los desarrolladores y arquitectos principales de la plataforma, y además empleado de Oracle (Geertjan Wielenga) ha comenzado a trabajar en un proyecto basado en la infraestructura de Netbeans pero usando JavaFX 2.0 en vez de Swing: eFX.
  5. Oracle está apoyando fuertemente a este proyecto.
  6. El modo de licenciamiento de las aplicaciones construidas con Netbeans Platform es "amigable con el pequeño empresario" ;-)
Así, que para ponerme manos a la obra, me he conseguido la siguiente documentación, y espero poder entenderla sin mayores problemas:
  1. Professional Java, JDK 6 Edition
  2. Patterns of Enterprise Application Architecture
No más por hoy, ya en la siguiente entrega, empezaré a comentar los detalles de netbeans platform.

1 comentario:

Oscar Rendon dijo...

Muy interesante Edwin, me dejaste con mucha curiosidad sobre el kernel para realizar este marco de aplicaciones... estaré pendiente de la serie!

Un saludo,
@orendon