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 Definición del DSL + Código a Mano Framework de aplicación + Editor Generado + Plantillas de Generación Aplicación Software Autor del DSL Autor de la aplicación Usuario de la aplicación
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
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 Exploring the new Domain-Specific Language (DSL Tools) DSL Tools Práctico. Tutorial DSL Tools. Generating Artifacts By Using Text Templates
Descargar DSL Tools Descargar “Visual Studio 2005 SDK Version 4.0” O buscar en google “Visual Studio 2005 SDK Version 4.0”.