¿Qué es un pattern?
El concepto de "pattern" (patrón) es bastante usado en la
programación orientada a objetos, y consiste en la descripción de un problema
recurrente y la mejor solución para el mismo, que ya ha sido utilizada con
anterioridad para resolver este mismo problema. Esto facilita la resolución de
estos problemas, ya que no es necesario "reinventar la rueda" cada
vez.
La herramienta Patterns de ARTech es un marco que permite
generar código GeneXus a partir de estos patrones. Esta herramienta cuenta con
algunos patrones ya implementados, y tiene la posibilidad de implementar nuevos
o adaptar los ya existentes. Por ejemplo, el patrón Work With permite, dada una
transacción, generar todos los objetos necesarios para implementar un "trabajar
con ..." web para esa transacción.
En el caso de Concepto, esta idea de generación de código
GeneXus en forma automática viene siendo usada desde hace tiempo.
¿Cómo se venía utilizando en Concepto la idea que
proponen los Patterns?
El primer
generador de código que desarrollamos ya tiene dos años y utiliza GXPublic para
acceder a la estructura de la base de conocimientos y genera el código que luego
es incorporado a la misma base de conocimiento.
Algunos ejemplos de las cosas que hemos venido usando
son:
- Dada una transacción, generar el código de un
procedimiento GeneXus que cargue (y otro que lea) un XML con la estructura de
la transacción.
- Dada la estructura de una Data Warehouse, generar
automáticamente el código necesario para realizar la carga de la información
en las tablas.
- Generación de scripts SQL a partir de las tablas y las
columnas en la base de datos (este punto es independiente de GeneXus).
- Dada una transacción (que representa un mensaje),
generar el XML Schema con su misma estructura, para poder
validarlo
- Dada una tabla (que representa un mensaje), generar el
procedimiento GeneXus que cargue (y otro que lea) archivos ASCII delimitado
por comas con los campos del mensaje y haga validaciones de tipos de
datos.
¿Qué ventajas ofrece el uso de Patterns?
Las ventajas de usar estos patrones (o generadores
de código) son bastante evidentes. Por ejemplo, el caso de salvar el contenido
de una transacción en un XML, solamente depende de la estructura de la
transacción (siempre que tengamos la posibilidad de definir nosotros la
estructura del XML). En este caso, todos los programas que realicen esta tarea
serán similares, solo cambiando los atributos que se utilizan.
Este ejemplo presenta un caso claro donde conviene usar
los patrones. Esto es porque solo tenemos que programar una vez el generador de
código, y luego "instanciarlo" para cada vez que queramos hacer el programa para
salvar el contenido de la transacción a XML.
Las ventajas más importantes son:
- Con muy poco esfuerzo (unos pocos clicks) podemos
generar programas con la funcionalidad deseada.
- Se evitan errores en el código. Pueden haber errores en
el generador de código, pero con el uso estos errores se van corrigiendo. En
cambio si se programa a mano, con cada programa nuevo podemos estar
introduciendo errores.
Lo mismo ocurre con el patrón Work With, que ya viene con
la herramienta Patterns. Este patrón permite generar varios objetos, que
conforman un "trabajar con ...", a partir de la transacción seleccionada. La
herramienta permite configurar las propiedades para cada transacción, como por
ejemplo los filtros que se usarán en el web panel de selección, los atributos y
el orden de las grillas, el folder donde se crearán los objetos, etc.
¿Cuál ha sido la experiencia de Concepto en el uso
Patterns?
En Concepto estuvimos haciendo
pruebas para crear nuevos patrones o adaptar los ya existentes. Por ejemplo,
extendimos el patrón Work With, para que tenga la posibilidad de generar una
planilla Excel con los datos de la grilla de selección. Nuestra experiencia fue
buena, ya que nos permitió evaluar la dificultad que presenta el desarrollo de
estos patrones, que nos permitan generar código de forma automática. La
principal dificultad es que para poder desarrollar estos patrones, es necesario
programar en C#.
Creo que es muy bueno que haya un marco estándar para
desarrollar estos patrones, como lo es la herramienta Patterns. Esto va a
permitir a la comunidad desarrollar nuevos patrones que van a facilitar aún más
el desarrollo de aplicaciones con GeneXus.
En nuestro caso, estamos evaluando realizar la migración
de los generadores de código a Patterns, ya que en este momento, los generadores
de código que tenemos no están estandarizados, sino que fueron desarrollados
cada uno en forma independiente. Tenerlos definidos como patrones, va a
facilitar el uso de los mismos, y el intercambio con otros miembros de la
comunidad, quienes a su vez podrían realizar aportes.
Petroglifo:
http://www.concepto.com.uy/petrocsharp
Más información de Patterns en el Wiki:
http://wiki.gxtechnical.com/wiki/tiki-index.php?page=Patterns