Arquitectura y Diseño de Agregador&Repositorio

Introducción

Este módulo del sistema se encarga de gestionar, de manera visual, un conjunto de gadgets locales en forma de paleta personal. Cada usuario tendrá su propia paleta personal con los gadgets seleccionados por dicho usuario.

Por otro lado, no es suficiente dotar de capacidades de gestión básica de conjuntos (insertar, borrar, reemplazar) a la paleta. Sino que se necesita poder organizar de manera adecuada, las relaciones entre los miembros de la paleta personal. En concreto, se piensa que deben existir mecanismos de caracterización (al menos tagging) y navegación sobre gadgets.

Finalmente, este módulo servirá de base para la creación personalizada de interfaces de usuario. Los gadgets disponibles por el usuario en su paleta, podrán ser agregados al entorno operacional construyendo así, un entorno operacional a medida.

Especificación de Requisitos

  • Cada usuario tendrá su propia paleta personal de gadgets
  • Un usuario podrá decidir si dicha paleta personal es pública o privada
  • Un usuario podrá agregar, eliminar o reemplazar por una versión nueva, un gadget de su paleta personal
  • La paleta personal guarda de manera local los gadgets, de tal forma que aunque el gadget original (publicado públicamente en Internet) cambie su contendido, la paleta no reflejará dichos cambios a no ser de que el usuario lo pida expresamente (operación actualizaar/reemplazar gadget).
  • La palete personal deberá hacer de caché de gadgets, arreglando en parte, los problemas del cross-domain de AJAX.
  • Existirá un catálogo/buscador global de todos los gadgets registrados en la plataforma. Desde dicho catálogo, el usuario podrá agregar a su paleta personal.
  • Agregar un gadget al entorno operacional desde la paleta tiene que ser una operación que no requiera recargar dicho entorno. Evitar refrescos innecesarios es un requisito imprescindible.
  • La gestión de los gadgets deberá ser lo más sencilla y abstracta posible, facilitando la reutilización de software entre módulos.
  • La paleta personal deberá ser el punto de la plataforma que mejor conozca al usuario. Dicha información deberá tratarse de una forma más confidencial para no invadir la intimidad del usuario. Si el usuario no expresa su consentimiento, no se deberá poder acceder a dicha información de ninguna manera.
  • La paleta personal debe ser un punto estratégico para extraer información de los usuarios. No solo gustos privados (los cuales deberían ser confidenciales a no ser de que se autorice) sino información sobre utilidad de gadgets, relaciones entre ellos, etc. El usuario deberá poder valorar/votar desde su paleta.

Casos de Uso

Agregar Gadget a la Paleta

  • Un usuario, mediante el catálogo, selecciona el gadget que desea agregar a su paleta personal.
  • La paleta es notificada de que hay un nuevo gadget
  • La paleta comprueba que dicho gadget no está ya cargado
  • La paleta hace persistente el nuevo estado
    • La paleta emplea el módulo de persistencia para guardar el nuevo estado
  • La paleta actualiza gráficamente su vista para mostrar un nuevo gadget

Eliminar Gadget de la Paleta

  • Un usuario genera un evento de eliminar gadget sobre un gadget en concreto
  • La paleta notifica el cambio al módulo de persistencia
  • La paleta actualiza gráficamente su vista

Actualizar Gadget

  • La plataforma muestra gráficamente que existe una versión más moderna de un gadget disponible en su paleta
  • El usuario invoca un evento de actualización
  • La paleta envía una orden asíncrona al módulo de persistencia para actualizar el gadget
  • La paleta pide opinión al usuario:
    • a) El usuario decide cargar inmediatamente la nueva versión del gadget
    • b) El usuario decide dejar para el próximo arranque la carga del gadget
  • Si hay que recargar en el instante, se invoca la orden recargar al gadget en concreto.

Agregar Gadget desde la Paleta al Entorno Operacional

  • El usuario selecciona un gadget de la paleta y lo agrega
  • Se hace persistente el nuevo estado
  • Se crea una representación abstracta en memoria del gadget
  • Se ordena a dicha representación que se dibuje

Terminología

A lo largo de este documento, se utilizarán dos términos que pueden llevar a confusión:

  • Gadget. Se referirá en TODO MOMENTO a una abstracción estática de gadget (en principio una tupla (Template,(XHTML + JS)). Será gestionada por la paleta.
  • Instancia de gadget. Será una abstracción dinámica de una instancia. Las manejará el entorno operativo.

Principios de Diseño de la Solución

  • Existen dos conceptos principales necesarios:
    • Clases de Gadgets (Gadget)
    • Instancias de Gadgets (IGadget)
  • La paleta personal mantiene (crea, borra y actualiza) una colección de Gadget.
  • Al mismo tiempo, crea objetos IGadget (con esto se modeliza agregar un gadget al entorno operacional).
  • La librería será usada por todos los módulos (no solo la paleta personal):
    • Entorno de presentación (Dragboard)
      • Invoca operaciones sobre IGadgets (muevete, repintate, etc)
      • Elimina objetos (IGadgets)
    • Wiring
      • Invoca operaciones sobre objetos IGadget(getWiringInfo, etc)
  • Un template es algo externo al gadget. Un gadget enlaza mediante una URL a su template. Un gadget puede tener n templates de esta forma.
  • Por eficiencia, habría que pensar en interfaces dobles: JavaScript? + REST.
    • Un claro ejemplo es la paleta:
      • Interfaz JS para que el usuario interactúe (por ejemplo, agregar un IGadget al entorno operacional)
      • Interfaz REST, por ejemplo para guardar la persistencia.
  • La solución mas sencilla para los requisitos de eficiencia sería concevir todos los interfaces de la plataforma como "capas" (visualmente, serán ventanas flotates o algo así) de una misma página. De esta manera, un evento generado por el usuario puede ser notificado instantánemente a los módulos involucrados.
    • Ejemplo más claro: un usuario agrega una instancia de gadget al entorno operacional.
    • La paleta invoca vía JS una operación en el entorno pasandole una nueva instancia.
    • El entorno operacional, invoca una operación REST para hacer persistente el nuevo estado.
    • Evitamos así recargas innecesarias como las que hace Google al agregar una instancia.

Arquitectura

Modulos funcionales

Librería JS de gestión de gadgets

  • Gestionará todo lo relacionado con los gadgets:
    • Su representación abstracta (reutilización de software entre los módulos)
    • Sus interfaces de usuario
    • Su comportamiento.

Interfaz de usuario

  • Mostrar los objetos Gadget almacenados en su colección
  • Navegar entre los distintos objetos Gadget gestionados en base a las etiquetas empleadas por EL USUARIO propietario de la paleta personal
  • Etiquetar un objeto Gadget
  • Instanciar un objeto IGadget en base a un objeto Gadget.

Modulo persistencia

  • Hacer persistente la metainformación (etiquetas, etc) de los objetos Gadget.
  • Hacer persistente los propios objetos Gadget.