Jose Juan MontielJose Juan Montiel

Generacion de codigo. Del modelo a la vista.

Bueno, por fin, mas de 9 meses despues de su inicio, me he animado a terminar esta entrada del blog, y fue tras el tweet de @jagedn que despues de la charla de @ilopmar en madridgug, hizo que me animara con asteroid.

Pero bueno, por orden.

En uno de mis anteriores artículos, hablaba de como, usando Groovy y Thymeleaf, se podía separar aun un poco mas, la maqueta de las indicaciones de donde colocar los elementos de binding, para mostrar los datos del modelo; y deje planteado unos próximos pasos, de como se podía generar parte de ese código.

Y no voy a hablar de como generar ese codigo en este post, tendra que ser mas adelante pero por lo menos, dejare listadas una serie de herramientas "utiles" para generar codigo.

A día de hoy, existen muchas maneras de "generar codigo". Por ejemplo, en este articulo Ivan nos cuenta las opciones que hay en groovy (en tiempo de compilacion, y en uno anterior, las de tiempo de ejecucion).

Y en esta charla, Mario, se centra en las ayudas que existen para la Metaprogramacion en groovy, los macros. Y también nos habla de una librería para ayudarnos en ese proceso de creacion de macros: asteroid

Si tuvieramos que hacer una clasificacion, diferente, de las distintas maneras de crear codigo podriamos hacerlo asi:

  1. Las de "java"

    1. Las que se ven

      1. Las que generan codigo fuente

        • Cosas como Spring Roo o Yeoman o la mas actual JHipster son herramientas que generan codigo "scaffolding".

        • Pero cosas como esta libreria Javapoet genera codigo fuente, a partir de un DSL, y asi partimos de unos fuentes comunes.

      2. Las que generan codigo "compilado". APT, es la herramienta en la que se basan el "resto" que modifcian el AST.

        • Por ejemplo, esta libreria, MagicBuilder genera codigo en tiempo de compilacion, siguiendo el patron builder.

      3. Las que modifican el bytecode

    2. Las que "no" se ven

      1. Las que usan injeccion de dependencias.

        • Al final declarar una variable, y que en tiempo de ejecucion se le haya asignado un valor, tambien es una manera de modificar el codigo. Aqui tambien tendrian cabida, ese tipo de cosas que, entre otros, hace Spring para generar los beans que nos injecta a traves de proxies por ejemplo.

      2. AspectJ / AOP

        • Esto, de alguna manera modifica el codigo/ast/bytecode, pero la peculiaridad es la manera de definir donde van a actuar estas transformaciones. Podrian considerarse una especie de AST Globales.

      3. Lombock

        • Es para aquellos que no pueden usar Groovy, que por lo menos, no tengan que hacer ciertas cosas que siempre son igual, como los getter/setter. Esto si entra claramente dentro de las AST.

    3. Las que modifican el codigo "cargado" en un "entorno" por otro

    4. Las que cambian el codigo en produccion mediante dinamic attach. Dynamic attach.

      • En esta charla, nos cuentan como usar YouDebug como un depurador interactivo en produccion.

    5. Las que compilan codigo desde unos fuentes en produccion. Compile sources en runtime.

  2. El mundo android

    1. Asistidas por gradle (con el plugin APT)

  3. Osgi vs Jigsaw Jeje, bueno, esto para otro dia :)

Y bueno, para que no se haga "bola" esta entrada del blog, simplemente reflejar "las distintas maneras de "generar codigo" que existen en el mundo de la JVM (java, groovy) ¿alguna mas?