Introducción a DSL Tools con
Visual Studio
Abdul Wahab Sultán Regalado
Domain-Specific Development
Es una forma de
NO REINVENTAR
la rueda.
La solución se
obtiene a partir
de un MODELO +
un FRAMEWORK.
Ejemplos de DSL
Modelo de
interfaz de
usuario de una
aplicación.
Ejemplos de DSL
Modelo de los
perfiles de
usuarios de una
aplicación.
Ejemplos de DSL
Modelo de Clases
de Negocio de una
aplicación.
Como proceder...
Identificar aquellos aspectos que se
repitan.
Identificar aquellos aspectos que varían
y diseñar un Domain-Specific
Language.
Dos formas de afrontar el reto.
Top-Down.
Caminamos desde
el modelo hacia el
código.
Down-Top.
Caminamos desde
el código hacia el
modelo.
Contextos en el desarrollo con
DSL
Tools
Autor del DSL
Autor de la aplicación
Usuario de
la aplicación
Definición del DSL
+ Código a Mano
Framework de aplicación
+ Editor Generado
+ Plantillas de Generación
Aplicación
Software
Arquitectura de DSL Tools
Construir un DSL con DSLTools
Crear un nuevo proyecto.
Definir las clases de dominio y
relaciones.
Asociar las clases de dominio y
relaciones con iconos gráficos.
Definir las validaciones.
Crear las plantillas para la generación
de código.
Crear un nuevo proyecto
Definir clases y relaciones
Asociar iconos gráficos
Definir Validaciones
Definir plantillas para la
Generación de Código
In-Memoy Store
Creación, manupulación
y eliminación de
elementos del modelo.
Transacciones
Deshacer/Rehacer
Reglas y Eventos.
Acceso al modelo del
dominio.
using (Transaction t =
this.Store.TransactionManager
.BeginTransaction("example"))
{
IssueState state =
new IssueState(store);
state.Name = "TestState";
Comment comment =
new Comment(store);
comment.CommentText =
"This is an interesting
state";
comment.Subjects.Add(state);
t.Commit();
}
Transformación a Código
Transformación a Código
Transformación a Código
Ejemplo
Ejemplo
string[] nextOptions = new string[]{};
if (!string.IsNullOrEmpty(currentState))
{
if ("Unassigned"==currentState)
nextOptions = new string[] {
"Unassigned" // allow leaving state
unchanged
"Approved",
"Rejected",
};
else if ("Rejected"==currentState)
nextOptions = new string[] {
"Rejected", // allow leaving state
unchanged
};
. . .
}
else
{ // New Issue
nextOptions = new string[] {"Unassigned"};
}
Ejemplo
Referencias
Domain-Specific Development with Visual Studio DSL Tools
(Steve Cook, Gareth Jones, Stuart Kent y Alan Cameron
Wills). (En especial los capítulos 7, 8, 10)
MSDN Domain-Specific Language Tools Documentation
http://msdn2.microsoft.com/en-us/library/bb126235.aspx
Exploring the new Domain-Specific Language (DSL Tools)
http://channel9.msdn.com/showpost.aspx?postid=246477
DSL Tools Práctico. http://dsltools.blogspot.com/
Tutorial DSL Tools. http://dsltools.wikispaces.com/
Generating Artifacts By Using Text Templates
http://msdn2.microsoft.com/en-us/library/bb126445.aspx
Descargar DSL Tools
Descargar “Visual Studio 2005 SDK Version 4.0”
http://www.microsoft.com/downloads/details.aspx?FamilyID=51a5c65b-c020-4e08-8ac0-3eb9c06996f4&DisplayLang=en
O buscar en google “Visual Studio 2005 SDK Version 4.0”.
Descargar

www.tdg-seville.info