Una de las características que se resaltan de Groovy es que es un lenguaje perfecto para escribir DSLs. Pero, ¿qué son los DSLs?
¿Qué son los DSLs?
Un DSL es un lenguaje de programación reducido que permite representar el conocimiento de un campo específico. Imaginemos que debemos desarrollar una aplicación que se encargue de la toma de decisiones en el entorno financiero. Para realizar la programación en Java o Groovy (o cualquier otro lenguaje), quien se encargue de la programación debería tener los conocimientos necesarios tanto del sistema financiero así como del lenguaje de programación utilizado.
Utilizando un DSL nos ahorraremos las reglas específicas del lenguaje de programación, centrando nuestros objetivos en la especificación de las reglas financieras necesarias para el correcto funcionamiento del sistema. De esta forma, vamos a poder encargar la parte relacionada con las reglas financieras a algún experto en la materia.
¿Por que Groovy?
Pues simplemente porque es un lenguaje dinámico que nos proporciona mucha libertad a la hora de crear estructuras necesarias en un contexto particular. Las características de Groovy que lo hacen idóneo para escribir DSLs son:
- Los Builders nos permiten crear estructuras en forma de árbol estructurado
- Se pueden añadir nuevos métodos y propiedades a través de categorías y metaclases. Incluso se puede hacer esto con los números para especificar cosas como 4.veces o 24.horas
- La mayoría de los operadores se pueden sobrecargar para poder hacer cosas como totalMinutos = 4.dias + 12.horas
- Podemos utilizar un mapa como parámetro en un método, lo cual es muy intuitivo. Por ejemplo mover(x:500.metros, y:2:kilometros)
- También podemos crear nuevas estructuras de control utilizando los closures, como por ejemplo siFaltaMenosDeUnDia{…}
Ejemplo de DSL
Un ejemplo de DSL puede ser GORM (Groovy Object Relational Mapping). GORM es el framework de persistencia utilizando en Grails. Basado en Hibernate, podemos utilizar GORM sin haber visto en nuestra vida nada sobre Hibernate, simplemente conociendo el modelo de datos. Imaginemos que tenemos una clase Persona mapeada contra una tabla de la base de datos. Gracias a GORM, podríamos acceder a los datos de la siguiente forma:
"Manuel""Ma%""M%", "L%")
Aquí os dejo un enlace donde se crea un DSL para realizar el cálculo de distancias