Compartir a través de


Introducción a los lenguajes específicos de dominio

Este tema explica los conceptos básicos en la definición y el uso de un lenguaje específico (DSL).

Si no está familiarizado con el dominio (ADSL), se recomienda ejecutar DSL Tools Lab, que puede encontrar en este sitio: SDK de Visualizaton y modelado

¿Qué puede hacer con un lenguaje específico de dominio?

Un lenguaje específico es una notación, normalmente gráfica, diseñada para ser utilizada para un propósito determinado. Por el contrario, los lenguajes como UML son de uso general. En DSL, puede definir los tipos de elemento de modelo y sus relaciones, y cómo se muestran en la pantalla.

Cuando haya diseñado DSL, puede distribuirlo como parte de un paquete de extensión de integración de Visual Studio. Trabajo de los usuarios con un ADSL en Visual Studio:

Diagrama de árbol genealógico, cuadro de herramientas y explorador

La notación sólo parte ADSL. Junto con la notación, el paquete VSIX incluye herramientas que los usuarios pueden aplicar como ayuda para modificar y generar el material de los modelos.

Una de las aplicaciones principales del dominio (ADSL) es generar código de programa, los archivos de configuración, y otros artefactos. Especialmente en proyectos grandes y líneas de productos, donde se crearán en distintas variantes de un producto, generar muchos de los aspectos variables del dominio (ADSL) puede proporcionar un aumento grande en la confiabilidad y una respuesta muy rápida a los cambios en los requisitos.

El resto de esta información general es un tutorial que presenta las operaciones básicas de crear y usar un lenguaje específico de Visual Studio.

Requisitos previos

Para definir un DSL, debe haber instalado los siguientes componentes:

Visual Studio

https://go.microsoft.com/fwlink/?LinkId=185579

Visual Studio SDK

https://go.microsoft.com/fwlink/?LinkId=185580

El SDK de visualización y modelado de Visual Studio

https://go.microsoft.com/fwlink/?LinkID=186128

Crear una solución ADSL

Para crear un nuevo lenguaje específico, creará una nueva solución de Visual Studio mediante la plantilla de proyecto de lenguaje específico de dominio.

Para crear una solución ADSL

  1. En el menú Archivo, elija Nuevo y haga clic en Proyecto.

  2. En tipos de proyecto, expanda el nodo de Otros tipos de proyectos , y haga clic en Extensibilidad.

  3. Haga clic Diseñador específico del lenguaje.

    Cuadro de diálogo para crear solución DSL

  4. en el cuadro de Nombre , FamilyTree escrito. Haga clic en Aceptar.

    Asistente específico del lenguaje abra, y muestra una lista de soluciones ADSL de la plantilla.

    Haga clic en cada plantilla para ver una descripción,

    Las plantillas son puntos inicial útiles. Cada uno de ellos proporciona ADSL que funciona completo, que se pueden modificar para satisfacer las necesidades. Normalmente, se elegiría la plantilla cercana qué desea crear.

  5. para este tutorial, elija la plantilla de lenguaje mínimo .

  6. Escriba una extensión de nombre de archivo para ADSL en la página del asistente correspondiente. Ésta es la extensión que los archivos que contienen las instancias ADSL utilizarán.

    • Elija una extensión que no está asociado a ninguna aplicación en el equipo, o en cualquier equipo donde desea instalar ADSL. Por ejemplo, docx y htm se extensiones de nombre de archivo inaceptables.

    • El asistente mostrará si la extensión especificado se utiliza como ADSL. Considere el uso de una extensión de nombre de archivo. También puede restablecer la instancia de Visual Studio SDK Experimental de vaciado a antiguos diseñadores experimentales. Haga clic en Iniciar, haga clic Todos los programas, Microsoft Visual Studio 2010 SDK, Herramientasy, a continuación restablezca la instancia de Microsoft Visual Studio 2010 Experimental.

  7. Inspeccione las otras páginas y haga clic en Finalizar.

    se genera una solución que contiene dos proyectos. Se denominan ADSL y DslPackage. Un archivo de diagrama se abre denominado DslDefinition.dsl.

    Nota

    La mayor parte del código que se puede ver en las carpetas en los dos proyectos se genera de DslDefinition.dsl.Por este motivo, la mayoría de las modificaciones a ADSL se crean en este archivo.

La interfaz de usuario se parece ahora a la siguiente imagen.

diseñador dsl

Esta solución define un lenguaje específico de dominio. Para obtener más información, vea Información general sobre la interfaz de usuario de las herramientas de los lenguajes específicos de dominio.

Las partes importantes de la solución ADSL

observe los aspectos siguientes de la nueva solución.

  • **El ADSL \DslDefinition .dsl **Éste es el archivo que aparecen al crear una solución de ADSL. Prácticamente todo el código de la solución se genera de este archivo, y la mayoría de los cambios que realice en ADSL una definición se realizan aquí. Para obtener más información, vea ejecutar Trabajar con diagramas de definición DSL.

  • El proyecto se Detallan de proyecto de ADSLcontiene el código que define el lenguaje específico.

  • El proyecto se Detallan de proyectos de DslPackagecontiene código que permite que editars instancias ADSL están abiertas y en Visual Studio.

Ejecutar ADSL

Puede ejecutar la solución ADSL en cuanto se haya creado. Después, puede modificar la definición ADSL gradualmente, ejecutar de nuevo la solución después de cada cambio.

Para experimentar con un ADSL

  1. Haga clic en Transformar todas las plantillas en la barra de herramientas del explorador de soluciones. esto regenera la mayor parte del código fuente de DslDefinition.dsl.

    Nota

    Siempre que se cambia DslDefinition.dsl, debe hacer clic en Transformar todas las plantillas antes de que se recompile la solución.Puede automatizar este paso.Para obtener más información, vea Cómo: Transformar automáticamente todas las plantillas.

  2. Presione F5, o en el menú de Depurar , haga clic Iniciar depuración.

    DSL compila y está instalado en la instancia experimental de Visual Studio.

    Se iniciará una instancia experimental de Visual Studio. La instancia experimental toma los valores de un subárbol independiente del registro, donde las extensiones de Visual Studio se registran para fines de depuración. las instancias normales de Visual Studio no tienen acceso a las extensiones registradas allí.

  3. En la instancia experimental de Visual Studio, abra el archivo modelo denominado Prueba de Explorador de soluciones.

    -O bien-

    Haga clic con el botón secundario en el proyecto de depuración, elija Agregar, y haga clic en Elemento. En el cuadro de diálogo de Agregar elemento , seleccione el tipo de archivo ADSL.

    El archivo modelo se abre como un diagrama en blanco.

    Se abrirá el cuadro de herramientas y muestra las herramientas adecuadas al tipo de diagrama.

  4. Use las herramientas para crear formas y conectores del diagrama.

    1. Para crear formas, arrastre de la herramienta del ejemplo al diagrama.

    2. Para conectar dos formas, haga clic en la herramienta de conector de ejemplo, haga clic en la primera forma, y después en la segunda forma.

  5. Haga clic en las etiquetas de formas para cambiarlas.

Visual Studio experimental será similar al siguiente ejemplo:

DSL_min

el contenido de un modelo

El contenido de un archivo que es una instancia ADSL se denomina un modelo. el modelo contiene modelelementsy vínculos entre los elementos. La definición ADSL especifica qué tipos de elementos de modelo y de vínculos pueden existir en el modelo. Por ejemplo, en un DSL creado a partir de la plantilla de lenguaje mínimos, hay un tipo de elemento de modelo, y un tipo de vínculo.

La definición ADSL puede especificar cómo el modelo aparece en un diagrama. Puede elegir entre una variedad de estilos de formas y conectores. Puede especificar que algunas formas aparecen dentro de otras formas.

Puede ver un modelo como un árbol en la vista de Explorador mientras edita un modelo. Cuando agrega formas en el diagrama, los elementos del modelo también aparecen en el explorador. El explorador se puede utilizar incluso si no hay ningún diagrama.

Si no puede ver el Explorador en la instancia de depuración de Visual Studio, en el menú de Ver a Otras ventanas, y haga clic en <El lenguaje>  Explorador.

API ADSL

DSL genera API que permite leer y actualizar los modelos que son instancias de ADSL. Una aplicación de API es generar archivos de texto de un modelo. Para obtener más información, vea Generación de código en tiempo de diseño usando las plantillas de texto T4.

En la solución de depuración, abra los archivos de plantilla con la extensión “.tt”. Estos ejemplos muestran cómo puede representar texto de modelos, y le permiten probar API ADSL. uno de los ejemplos se escribe en Visual Basic, el otro en Visual C#.

En cada archivo de plantilla es el archivo que genera. Expanda el archivo de plantilla en el explorador de soluciones, abra el archivo generado.

El archivo de plantilla contiene un segmento corto de código que muestra todos los elementos del modelo.

el archivo generado contiene el resultado.

Al cambiar un archivo modelo, verá los cambios correspondientes en archivos generados después de que se vuelva a generar los archivos.

Para regenerar los archivos de texto después de cambiar el archivo modelo

  1. En la instancia experimental de Visual Studio, guarde el archivo del modelo.

  2. Asegúrese de que el parámetro de nombre de archivo en cada archivo .tt examine el archivo modelo que está usando para experimentos. Guarde el archivo .tt.

  3. Haga clic Transformar todas las plantillas en la barra de herramientas de Explorador de soluciones.

    -O bien-

    Haga clic con el botón secundario en las plantillas que desea volver a generar y haga clic en Ejecutar herramienta personalizada.

Puede agregar cualquier número de archivos de plantilla de texto a un proyecto. Cada plantilla genera un archivo de resultados.

Nota

Cuando se cambia la definición ADSL, el código de plantilla de texto de muestra no funcionará, a menos que se actualice.

Para obtener más información, vea Generar código a partir de lenguajes específicos de dominio y Escribir código para personalizar lenguajes específicos de dominio.

Personalizar ADSL

Si desea modificar la definición ADSL, cierre la instancia experimental y actualiza la definición en la instancia principal de Visual Studio .

Nota

Una vez que haya modificado la definición ADSL, podría perder la información en los modelos de prueba creada con versiones anteriores.Por ejemplo, la solución de depuración contiene un archivo que se denomina Sample, que contiene algunas formas y conectores.Después de iniciar para desarrollar la definición ADSL, no son visibles, que se perderán cuando guarde el archivo.

Puede crear una amplia variedad de extensiones en ADSL. Los ejemplos siguientes le dará la impresión de las posibilidades.

Después de cada cambio, guarde la definición ADSL, haga clic en Transformar todas las plantillas en Explorador de soluciones, y presione F5 para experimentar con un ADSL cambiado.

Cambie los tipos y las herramientas

Cambie las clases y las relaciones existentes del dominio. Por ejemplo, de una definición de ADSL creada a partir de la plantilla de lenguaje mínimos, podría realizar las operaciones de cambio de nombre siguientes, para que un DSL representa los árboles de familia.

Para cambiar el nombre de clases, las relaciones y las herramientas de dominio

  1. En el diagrama de DslDefinition, cambie ExampleModel a FamilyTreeModel, ExampleElement person, los destinos a los elementos primarios, y los orígenes a los elementos secundarios. Puede hacer clic en cada etiqueta para cambiarla.

    Diagrama de definición DSL - modelo de árbol genealógico

  2. El nombre de las herramientas del elemento y el conector.

    1. Abra la ventana del Explorador ADSL haciendo clic en la pestaña en el explorador de soluciones. Si no puede verlo, en el menú de Ver a Otras ventanas y después en Explorador ADSL. El Explorador ADSL solo es visible cuando el diagrama de la definición de un DSL es la ventana activa.

    2. Abra la ventana Propiedades y colóquelo para poder ver el Explorador y propiedades ADSL al mismo tiempo.

    3. En el Explorador ADSL, expanda Editor, Fichas del cuadro de herramientas, <DSL> y, a continuación Herramientas.

    4. Haga clic en ExampleElement. Es el elemento del que se utiliza para crear elementos.

    5. En la ventana Propiedades, cambie la propiedad de Nombre person.

      Observe que la propiedad de Título también.

    6. De la misma manera, cambie el nombre de la herramienta de ExampleConnector a ParentLink. Modifique la propiedad de Título de modo que no es una copia de la propiedad Name. Por ejemplo, escriba el vínculo primario.

  3. Recompile ADSL.

    1. Guarde el archivo de definición de ADSL.

    2. Haga clic en Transformar todas las plantillas en la barra de herramientas del explorador de soluciones

    3. Presione F5. espere hasta que aparezca la instancia experimental de Visual Studio .

  4. En la solución de depuración en la instancia experimental de Visual Studio, abra un archivo de modelo de la prueba. Arrastrar elementos sobre él en el cuadro de herramientas. Observe que las leyendas de la herramienta y los nombres de tipo en el Explorador ADSL han cambiado.

  5. Guarde el archivo del modelo.

  6. Abra un archivo .tt y reemplaza apariciones de antiguos tipo y de propiedades con los nuevos nombres.

  7. Asegúrese de que el nombre de archivo que se especifica en el archivo .tt especifique el modelo de la prueba.

  8. Guarde el archivo .tt. Abra el archivo generado para ver el resultado de ejecutar el código en el archivo .tt. Compruebe que es correcta.

Agregue propiedades de dominio a las clases

Agregue propiedades a una clase de dominio, por ejemplo para representar los años de compilación y muerte de una persona.

Para crear nuevas propiedades visible en el diagrama, debe agregar elementos decorator a la forma que muestra el elemento de modelo. También debe asignar propiedades a los elementos decorator.

Para agregar propiedades y mostrarlas

  1. Agregue propiedades.

    1. En el diagrama de la definición de DSL, haga clic con el botón secundario en la clase de dominio person, elija Agregar, y haga clic en Propiedad de dominio.

    2. Escriba una lista con los nuevos nombres de propiedad, como Birth And Death. Presione Entrar después de cada uno.

  2. Agregue los elementos decorator que mostrará las propiedades en la forma.

    1. Siga la línea gris que extiende de la clase de dominio de la persona al otro lado del diagrama. Esto es un mapa del elemento del diagrama. Vincula la clase de dominio a una clase de la forma.

    2. Haga clic con el botón secundario en esta clase shape, elija Agregar, y haga clic en Text a decorador.

    3. Agregue dos elementos decorator con nombres como BirthDecorator y DeathDecorator.

    4. Seleccionar cada nuevo elemento decorator, y en la ventana Propiedades, establezca el campo de Posición . Esto determina si el valor de propiedad de dominio se mostrará en la forma. por ejemplo, establezca InnerBottomLeft y InnerBottomRight.

      Definición de forma de compartimiento

  3. Asigna a los elementos decorator a las propiedades.

    1. Abra la ventana detalles de ADSL. Generalmente en una ficha al lado de la ventana de salida. Si no puede ver, en el menú de Ver , elija Otras ventanas, y haga clic en Detalles ADSL.

    2. En el diagrama de la definición de DSL, haga clic en la línea que conecta la clase de dominio de la persona con la clase shape.

    3. En Detalles ADSL, en la pestaña de Mapas de decorador , haga clic en la casilla de un elemento decorator no asignados. En Muestre la propiedad, seleccione la propiedad de dominio a la que se desea asignada. por ejemplo, BirthDecorator asignado a Birth.

  4. Guarde DSL, haga clic en Todas las plantillas de transformación, y presione F5.

  5. En un diagrama del modelo del ejemplo, compruebe que ahora puede hacer clic en las posiciones que eligió y escriba valores en ellas. Además, al seleccionar una forma person, la ventana Propiedades muestra las propiedades nuevas Birth And Death.

  6. En un archivo .tt, puede agregar código que obtiene las propiedades de cada persona.

Diagrama de árbol genealógico, cuadro de herramientas y explorador

defina las nuevas clases

Puede agregar clases y relaciones de dominio a un modelo. Por ejemplo, podría crear una nueva clase para representar city, y una nueva relación para representar que una persona vivió en una ciudad.

Para que los diferentes tipos distintos en un diagrama del modelo, puede asignar las clases de dominio a los diferentes tipos de forma, o a las formas con diferentes geometría y colores.

Para agregar y mostrar una nueva clase de dominio

  1. Agregue una clase de dominio y conviértala en un elemento secundario de la raíz del modelo.

    1. En el diagrama de la definición de DSL, haga clic en la herramienta de Relación de incrustación , haga clic en la clase FamilyTreeModel raíz, y haga clic en una parte vacía del diagrama.

      Una nueva clase de dominio aparece, que están conectados al FamilyTreeModel con una relación de incrustación.

      establezca su nombre, por ejemplo Town.

      Nota

      Cada clase de dominio a menos que la raíz del modelo debe ser el destino de al menos una relación que inserta, o debe heredar de una clase que es el destino de una incrustación.Por esta razón, suele ser conveniente crear una clase de dominio utilizando la herramienta de Relación que inserta.

    2. Agregue una propiedad de dominio a la nueva clase, por ejemplo nombre.

  2. Agregue una relación de referencia entre person y Town.

    1. Haga clic en la herramienta de Haga referencia a la relación , haga clic en person y haga clic en Town.

      Fragmento de definición DSL: raíz de árbol genealógico

      Nota

      Las relaciones de referencia representan referencias cruzadas entre un elemento de árbol modelo a otra.

  3. Agregue una forma para representar ciudades de los diagramas del modelo.

    1. Arrastre Forma de geometría de cuadro de herramientas al diagrama y cambie su nombre, por ejemplo TownShape.

    2. En la ventana Propiedades, establezca los campos de la apariencia de la nueva forma, como el color de relleno y Geometría.

    3. Agregue un Decorator para mostrar el nombre de la ciudad, y cambie su nombre NameDecorator. Establezca la propiedad Position.

  4. Asigna la clase de dominio de Town al TownShape.

    1. Haga clic en la herramienta de Mapa del elemento del diagrama , haga clic en la clase de dominio de Town, y a continuación la clase shape de TownShape.

    2. En la pestaña de Mapas de decorador de la ventana de Detalles ADSL con el NameDecorator seleccionado, comprobado y el conjunto Propiedad display el conector a llamar.

  5. Cree un conector y muestra la relación entre la persona y ciudades.

    1. Arrastre un conector de cuadro de herramientas al diagrama. Cámbielo y establezca sus propiedades de apariencia.

    2. utilice la herramienta de Mapa del elemento del diagrama para vincular el nuevo conector a la relación entre la persona y Town.

      Definición de árbol genealógico con asignación de forma agregada

  6. Cree una herramienta de elementos para crear nuevo Town.

    1. En Explorador ADSL, expanda Editor a Fichas del cuadro de herramientas.

    2. Haga clic con el botón secundario en <DSL> y haga clic en Agregue la nueva herramienta de elementos.

    3. establezca la propiedad de Nombre de la nueva herramienta, y establezca su propiedad de class a Town.

    4. establezca la propiedad de Icono de cuadro de herramientas . Haga clic en [...] y en el campo de Nombre de archivo , seleccione un archivo de icono.

  7. Cree una herramienta de conector para crear un vínculo entre las ciudades y las personas.

    1. Haga clic con el botón secundario en <DSL> y haga clic en Agregue la nueva herramienta de conector.

    2. establezca la propiedad Name de la nueva herramienta.

    3. En la propiedad de ConnectionBuilder , seleccione el generador que contiene el nombre de la relación de Persona-Town.

    4. establezca Icono de cuadro de herramientas.

  8. Guarde la definición ADSL, haga clic en Transformar todas las plantillas, y presione F5.

  9. En la instancia experimental de Visual Studio, abra un archivo de modelo de la prueba. utilice las nuevas herramientas para establecer ciudades y relaciones entre las ciudades y las personas. Observe que sólo se pueden establecer relaciones entre los tipos adecuados de elemento.

  10. Crear código que enumera la ciudad en la que cada persona activos. Las plantillas de texto son uno de los lugares donde puede ejecutar este código. Por ejemplo, podría modificar el archivo existente de Sample.tt en la solución de depuración de modo que contenga el código siguiente:

    <#@ template inherits="Microsoft.VisualStudio.TextTemplating.VSHost.ModelingTextTransformation" debug="true" #>
    <#@ output extension=".txt" #>
    <#@ FamilyTree processor="FamilyTreeDirectiveProcessor" requires="fileName='Sample.ftree'" #>
    
    <#
      foreach (Person person in this.FamilyTreeModel.People)
      {
    #>
        <#= person.Name #><#if (person.Town != null) {#> of <#= person.Town.Name #> <#}#>
    
    <#
          foreach (Person child in person.Children)
      {
    #>
                <#= child.Name #>
    <#
      }
      }
    #>
    

    Al guardar el archivo de *.tt, creará un archivo subsidiario que contiene la lista de personas y sus residencias. Para obtener más información, vea Generar código a partir de lenguajes específicos de dominio.

validación y comandos

Puede desarrollar este ADSL aún más agregando restricciones de validación. Estas restricciones son métodos que puede definir, que garantizan que el modelo está en un estado correcto. Por ejemplo, puede definir una restricción para asegurarse de que la fecha de nacimiento de un elemento secundario es posterior a la de sus elementos primarios. La característica de validación muestra una advertencia si el usuario ADSL intenta guardar un modelo que interrumpa restricciones cualquiera de los. Para obtener más información, vea La validación en los lenguajes específicos de dominio.

También puede definir los comandos de menú que el usuario puede invocar. los comandos pueden modificar el modelo. También pueden interactuar con otros modelos de Visual Studio y con los recursos externos. Para obtener más información, vea Cómo: Modificar comandos de menú estándar en lenguajes específicos de dominio.

Implementar ADSL

Para permitir que otros usuarios utilizar el lenguaje específico, se distribuye un archivo de extensión de Visual Studio (VSIX). Se crea esto cuando se compila la solución ADSL.

Busque el archivo .vsix en la carpeta bin de la solución. Cópielo en el equipo en el que desea instalarlo. En ese equipo, haga doble clic en el archivo VSIX. DSL se puede utilizar en todas las instancias de Visual Studio en ese equipo.

Puede utilizar el mismo procedimiento para instalar ADSL en dispone del equipo de modo que no tenga que utilizar la instancia experimental de Visual Studio.

Para obtener más información, vea Implementar soluciones de lenguajes específicos de dominio.

Quitar Experimental antiguo dominio (ADSL)

Si ha creado el dominio (ADSL) experimental que deja, puede quitarlos del equipo y la instancia de Visual Studio Experimental.

Esto quitará del equipo todo el dominio (ADSL) experimental y otras extensiones experimentales de Visual Studio . Estas son las extensiones que se han ejecutado en la depuración.

Este procedimiento no quita el dominio (ADSL) u otras extensiones de Visual Studio que han sido instalados totalmente ejecutando el archivo VSIX.

Para restaurar la instancia de Visual Studio Experimental

  1. Haga clic en Iniciar, haga clic Todos los programas, Microsoft Visual Studio 2010 SDK, Herramientasy, a continuación restablezca la instancia de Microsoft Visual Studio 2010 Experimental.

  2. Recompile cualquier dominio (ADSL) experimental u otras extensiones experimentales de Visual Studio que se desee utilizar.

Vea también

Conceptos

Introducción a los modelos, las clases y las relaciones

Cómo: Definir lenguajes específicos de dominio

Otros recursos

SDK de Visualizaton y modelado