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

Entradas más populares de este blog

El Sordo

StackOverflow Documentation

Paleta de colores en GeneXus