Data Selectors y Data Providers

Esta semana esta la cosa tranquila, y las demás tareas del trabajo me permitieron  volver a una de las cosas que mas me gusta que es programar.

Estoy trabajando en un sitio nuevo web, con la versión X U1 de GeneXus y tablas bastante grandes.
Es una buena oportunidad para la utilización de las nuevas funcionalidades de la X (que ya no son novedades, solo que yo no he podido usarlas con la profundidad que hubiese deseado.

Por un lado, uso mucho los Data Selectors, que son una idea maravillosa. Son la reutilización de conocimiento, permitiendo la definición centralizada de navegaciones (se pueden traducir a las condiciones where de SQL).
Si bien no los use con casos muy complejos,  no he tenido ningún problema usando los Data Selectors. Son fáciles de entender y no me presentaron problemas. El código queda mas claro y la aplicación es mas fácil de optimizar y lo que es mas importante, es mucho mas fácil de mantener.
Para aplicaciones migradas, creo que conviene la definición de los principales data selectors de la aplicación y empezar a cambiar los objetos que utilizan esa navegación, como por ejemplo ClientesActivos, FacturasVigentes, etc.


Por otro lado en la aplicación necesitaba hacer gráficos y rankings por lo que resultaba atractivo la utilización de los Data Providers para la obtención de dichos datos con buena performance.
Mi experiencia con los DP es un poco diferente. Tiene una curva de aprendizaje mayor y cuando se sale de los ejemplos mas sencillos, el lenguaje que se utiliza para expresar las consultas me costo bastante entenderlo y no me resulto intuitivo.

Creo que el problema es que estoy pensando en un nivel de abstracción no adecuado. Generalmente ya conozco la sentencia SQL que quiero obtener (con group by, having y formulas de agregacion como sum y count) y luego intento reproducir esto con los Data Providers. Esa forma de trabajar, da mucho trabajo.
Por ejemplo, no logre ordenar por un sum() y en algunas ocasiones he tenido problemas que condiciones que debían ir a la base de datos (como por ejemplo Atributo.lenght() = &Variable.lenght()) no solo no se resolvía en la base de datos, sino que no era incluida en las condiciones!.

Después de ver los videos, leer la documentación del wiki y algunos ejemplos, pude resolver todos los casos que tenia planteados, pero me hubiese llevado mucho menos tiempo, hacerlo con codigo procedural.
Creo que después de conocer el funcionamiento y la sintaxis del lenguaje de los Data Providers, puede ahorrarse bastante en su mantenimiento, pero la curva de aprendizaje me resulto mas empinada que lo esperado.

Creo que el pattern WorkWith generar Data Selectors para poder tener ejemplos que funcionen con nuestros datos, lo cual ayuda a entenderlos. Ya hay varios User Control que incluyen Data Providers, bastantes sencillos.

Comentarios

  1. Hola no se si le será posible responder por aquí, pero no encontré otra vía, Mi nombre es Frank y llevo hace algunos meses introduciéndome en Genexus, y como es natural, tengo algunas dudas.
    Mi problema principal es que necesito construir un data probider , un procedure o algún otro objecto genexus de forma dinámica, es decir , que reciban los parámetros mediante un listado de strings, y que dicho objeto los traduzca a atributos de la KB con lo cual pueda elaborar una determinada consulta y devolverme los datos en json, xml, etc. Dichos parámetros deben ser dinámicos ya que pueden variar en cantidad y en orden. No he encontrado forma de hacer esto, espero pueda responder
    Saludos Cordiales
    Frank

    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.