Metadata en aplicaciones GeneXus

Hace unos días, intercambiábamos ideas con algunos amigos sobre aplicaciones y otros temas relacionados con testeo. La mayoría de los que participábamos en la charla, trabajamos con GeneXus y veíamos el problema de no contar con algún tipo de metadatos o información relacionada con como dicha aplicación fue generada.



En el proceso de generación de código se "pierde" gran cantidad de conocimiento. En realidad ese conocimiento no se pierde sino que queda en un formato muy difícil de ser utilizado por aplicaciones. El código generado contiene gran cantidad de ésta información, pero para poder recuperarla, hay que poder extraer del código los datos que nos interesan, lo cual es una tarea que produce inflamación en diversas partes el cuerpo (al menos a mí). El código generado es diferente para cada uno de los generadores, lo cual multiplica el trabajo a realizar.

Este proceso, puede ser visto como un re trabajo, que tiene sentido cuando algún humano escribió el código a mano, pero no es productivo, cuando dicho código fue escrito automáticamente (generado).

Esto le da a GeneXus una oportunidad de diferenciarse en este aspecto generando además de la aplicación, lo necesario para recuperar estos metadatos.

El tipo de aplicación que están queriendo hacer son por ejemplo:

  • Registro de actividad de Usuario / Reproducir dicha actividad (Record/PlayBack)
  • Trace detallado
  • Módulos de seguridad por elemento de pantalla
  • Procesadores genéricos de SDT o BC
  • Reportes diseñados por usuarios finales (sin regenerar)
  • Motores de reglas de negocio
  • algunos etcétera mas que no debo nombrar...

La información que se está necesitando para poder hacer estas aplicaciones, muchas veces está disponible en la KB o es deducible por el especificador / generador, pero no es guardada en un formato que pueda ser utilizada por aplicaciones externas.

Seria muy útil, poder contar con los (meta)datos de:
  • Nombre de Controles en pantalla (como se llama el botón, o la tabla del Formulario)
  • Estructura de tablas / Índices de la misma.
  • Estructura de SDTs
  • Estructura de BCs
  • Sentencias SQL generadas (las fijas y las dinámicas)
  • Descripción/Largo/Tipo de atributos
  • Descripción/Propiedades/ de tablas
  • Propiedades del Modelo
  • etc.
Algunas de estos metadatos, debería poder recuperarse en tiempo de ejecución (runtime), por lo que no alcanza con que el generador exporte esta información, sino que la aplicación debería ser capaz de consultarse a sí misma en el momento que está ejecutando.

Si pudiésemos tener éste tipo de información (que alguna no es fácil de obtener) se podrían desarrollar una clase diferente de aplicaciones a las que hoy hacemos, que se podrían adaptar mejor al entorno y admitirían mayor personalización.

Comentarios

  1. Hola Enrique, creo que lo que decís es muy interesante y las necesidades claras. Si bien técnicamente hoy podrías hacer un generador de esta metadata, lo que quedaría afuera es que los programas los propios programas generados la usaran lo cuál en muchos casos no serviría y en otros sí. Este tema lo tenemos en la mira hace tiempo y seguramente estemos trabajando sobre él en el corto plazo.

    ResponderBorrar
  2. Gaston:
    Es bueno enterarse que estan por encarar este tema. Creo que es algo que nos va a venir muy bien para algunas aplicaciones que hoy quedan relegadas.

    El que las aplicaciones generadas puedan usar dicha metadata, es fundamental para darle mas "adaptabilidad" a las mismas, en la instalacion del cliente.

    ResponderBorrar
  3. Cuando salió la primer versión de GxPublic yo imaginé que rápidamente evolucionaría a un servidor de metadata, algo que pudiéramos usar para cosas como seguridad, logging, y hasta generación de objetos genexus.

    De hecho, la feature de los patterns podría haber sido provista por un programa vb usando gxpublic desde hace años.

    Lamentablemente mi experiencia con la api siempre fue bastante mala, y ni que hablar de instalar algo en producción que dependa de una kb expuesta por gxp (la opción ha sido entonces, actualizar tablas de metadata en cada generación, but I digress).

    Genexus tiene todo para ser un lenguaje reflexivo, estoy convencido de que es cuestión de tiempo.

    ResponderBorrar
  4. Jav:
    Creo que la evoluncion se va a dar, pero no rapidamente :(

    Ya existen varias fuentes de metadatas. Por parte de Artech Patterns, GXQuery, GXPlorer, GXFlow todos usan metadata de alguna forma.
    Se que hay varios otros generadores de codigo, por ejemplo, nosotros usamos la generacion programas GeneXus para intercambio de de datos, archivos xml o webservices.
    Tambien usamos lo mismo para la generacion de programas de carga de metadata en Data Warehouse.

    Lo interesante de esto, como comentaba Gaston en el comentario de arria, es poder lograr que las aplicaciones GeneXus usen esa metadata en forma facil.

    Estoy de acuerdo que cuando tengamos reflexion en GeneXus se van a poder hacer cosas muy interesantes.

    Es recomendable seguir pidiendolo y con eso lograremos tenerlo antes, pues creo que es bueno para todos.

    Enrique

    ResponderBorrar

Publicar un comentario

1) Lee el post
2) Poné tu opinión sobre el mismo.
Todos los comentarios serán leidos y la mayoría son publicados.

Entradas más populares de este blog

Aplicación monolítica o distribuida?

La nefasta influencia del golero de Cacho Bochinche en el fútbol uruguayo

Funcionalidades de GeneXus que vale la pena conocer: DATE Constants.