Diferencia entre revisiones de «DSL»
(Página creada con 'Category: Diseño De Software') |
|||
(No se muestran 13 ediciones intermedias del mismo usuario) | |||
Línea 1: | Línea 1: | ||
+ | ''Fuente: [http://eamodeorubio.wordpress.com/2010/09/13/%C2%BFque-son-los-dsl-domain-specific-languages/ Que son los Dsl]'' | ||
+ | |||
+ | == Qué son los DSL == | ||
+ | |||
+ | DSL (Domain Specific Languages) se llama a cualquier lenguaje que esté especializado en modelar o resolver un conjunto específico de problemas. Se diferencian de los lenguajes de programación, que están pensados para resolver cualquier tipo de problemas (lenguajes generalistas). Estos últimos, lo que suman en generalidad, también lo hacen en complejidad. | ||
+ | |||
+ | De esta forma nació el enfoque de los DSL, en vez de usar un lenguaje generalista, puedo usar diversos lenguajes de propósito específico, para resolver los diferentes problemas que surgen al implementar una aplicación. Por lo tanto sería muy eficiente contar con varios DSL, uno para cada tipo de problema con el que nos solemos encontrar, y para los problemas no tan típicos (los menos) solucionarlos con lenguajes generalistas. | ||
+ | |||
+ | Se utilizan DSL para resolver por ejemplo: | ||
+ | * Definición de interfaces de usuario | ||
+ | * Seguridad. | ||
+ | * Transacciones. | ||
+ | * Persistencia. | ||
+ | * Validación. | ||
+ | * Definición de tests automatizados | ||
+ | |||
+ | |||
+ | Ejemplos de DSL: | ||
+ | * SQL | ||
+ | * XML | ||
+ | * HTML | ||
+ | * CSS | ||
+ | * JSP | ||
+ | |||
+ | Existe un ciclo de vida en la evolución de una solución a un problema dentro del software. Primero resolvemos el problema como se nos ocurra. Después, conforme ganamos experiencia, al resolver el problema varias veces en contextos distintos, encontramos buenas prácticas o “recetas”, que nos permiten resolver el problema mediante copy/paste. En una etapa posterior de maduración, conseguimos abstraer esas recetas, en una librería que sigue un determinado diseño, y obtenemos un patrón de diseño al abstraer el diseño de la implementación en si. Una vez que tenemos varios patrones de diseño que resuelven distintos problemas de la misma categoría, podemos implementarlos juntos, y obtenemos un framework. Finalmente, y este es el paso menos conocido, el framework se hace cada vez más configurable y automatizado, con lo que éste termina evolucionando en un DSL. | ||
+ | |||
+ | == Tipos de DSL == | ||
+ | Desde el punto de vista del tipo de problemas que resuelven, tenemos dos tipos de DSL, DSLs de negocio y DSLs técnicos. Sin embargo existe otra forma diferente de categorizar los DSLs, según el enfoque a la hora de implementarlos. De esta manera tenemos dos tipos: | ||
+ | |||
+ | === DSLs externos === | ||
+ | Un DSL externo es un lenguaje en si mismo, independiente de cualquier otro lenguaje. Posee su propia sintaxis, compilador y/o interprete, e incluso puede llegar a tener su propio IDE. Ejemplos de DSLs externos son SQL o ANTLR. | ||
+ | Los DSLs externos son el típico caso en el que uno piensa cuando se imagina un DSL, un lenguaje nuevo y aparte de los que ya existen. | ||
+ | |||
+ | === DSLs internos === | ||
+ | En este enfoque no construimos un lenguaje desde cero, sino que aprovechamos un lenguaje ya existente para construir nuestro DSL. Usando un poco de imaginación y exprimiendo los trucos del lenguaje anfitrión y su sintaxis, podemos construir una librería o framework que implemente el DSL de forma nativa al lenguaje anfitrión. Algunas técnicas usadas son los patrones “method chaining” y “builder”, el uso de métodos factoría estáticos, import estáticos, tipos y métodos paramétricos (genéricos) y por supuesto mucha reflexión, metaprogramación y los siempre agradecidos proxies dinámicos. | ||
+ | Un excelente ejemplo de DSL interno es el propio jMock. | ||
+ | Los DSL internos también son llamados "fluent interface" o "fluent API". | ||
+ | |||
+ | == Enlaces == | ||
+ | [http://eamodeorubio.wordpress.com/2010/09/13/%C2%BFque-son-los-dsl-domain-specific-languages/ Fuente] | ||
+ | |||
+ | [[Selenium con DSL]] | ||
+ | |||
[[Category: Diseño De Software]] | [[Category: Diseño De Software]] |
Revisión actual del 18:23 26 abr 2011
Fuente: Que son los Dsl
Qué son los DSL
DSL (Domain Specific Languages) se llama a cualquier lenguaje que esté especializado en modelar o resolver un conjunto específico de problemas. Se diferencian de los lenguajes de programación, que están pensados para resolver cualquier tipo de problemas (lenguajes generalistas). Estos últimos, lo que suman en generalidad, también lo hacen en complejidad.
De esta forma nació el enfoque de los DSL, en vez de usar un lenguaje generalista, puedo usar diversos lenguajes de propósito específico, para resolver los diferentes problemas que surgen al implementar una aplicación. Por lo tanto sería muy eficiente contar con varios DSL, uno para cada tipo de problema con el que nos solemos encontrar, y para los problemas no tan típicos (los menos) solucionarlos con lenguajes generalistas.
Se utilizan DSL para resolver por ejemplo:
- Definición de interfaces de usuario
- Seguridad.
- Transacciones.
- Persistencia.
- Validación.
- Definición de tests automatizados
Ejemplos de DSL:
- SQL
- XML
- HTML
- CSS
- JSP
Existe un ciclo de vida en la evolución de una solución a un problema dentro del software. Primero resolvemos el problema como se nos ocurra. Después, conforme ganamos experiencia, al resolver el problema varias veces en contextos distintos, encontramos buenas prácticas o “recetas”, que nos permiten resolver el problema mediante copy/paste. En una etapa posterior de maduración, conseguimos abstraer esas recetas, en una librería que sigue un determinado diseño, y obtenemos un patrón de diseño al abstraer el diseño de la implementación en si. Una vez que tenemos varios patrones de diseño que resuelven distintos problemas de la misma categoría, podemos implementarlos juntos, y obtenemos un framework. Finalmente, y este es el paso menos conocido, el framework se hace cada vez más configurable y automatizado, con lo que éste termina evolucionando en un DSL.
Tipos de DSL
Desde el punto de vista del tipo de problemas que resuelven, tenemos dos tipos de DSL, DSLs de negocio y DSLs técnicos. Sin embargo existe otra forma diferente de categorizar los DSLs, según el enfoque a la hora de implementarlos. De esta manera tenemos dos tipos:
DSLs externos
Un DSL externo es un lenguaje en si mismo, independiente de cualquier otro lenguaje. Posee su propia sintaxis, compilador y/o interprete, e incluso puede llegar a tener su propio IDE. Ejemplos de DSLs externos son SQL o ANTLR. Los DSLs externos son el típico caso en el que uno piensa cuando se imagina un DSL, un lenguaje nuevo y aparte de los que ya existen.
DSLs internos
En este enfoque no construimos un lenguaje desde cero, sino que aprovechamos un lenguaje ya existente para construir nuestro DSL. Usando un poco de imaginación y exprimiendo los trucos del lenguaje anfitrión y su sintaxis, podemos construir una librería o framework que implemente el DSL de forma nativa al lenguaje anfitrión. Algunas técnicas usadas son los patrones “method chaining” y “builder”, el uso de métodos factoría estáticos, import estáticos, tipos y métodos paramétricos (genéricos) y por supuesto mucha reflexión, metaprogramación y los siempre agradecidos proxies dinámicos. Un excelente ejemplo de DSL interno es el propio jMock. Los DSL internos también son llamados "fluent interface" o "fluent API".