Compartir a través de


Personalizar y extender un lenguaje específico de dominio

El SDK de modelado y visualización de Visual Studio (VMSDK) proporciona varios niveles en los que puede definir herramientas de modelado:

  1. Defina un lenguaje específico de dominio (DSL) mediante el diagrama de definición de DSL. Puede crear rápidamente un DSL con una notación en forma de diagrama, un formato XML legible, y las herramientas básicas que se necesitan para generar código y otros artefactos. Para obtener más información, vea Procedimientos para definir lenguajes específicos de dominio.

  2. Ajuste el DSL usando características más avanzadas de la definición de DSL. Por ejemplo, puede hacer que aparezcan vínculos adicionales cuando el usuario crea un elemento. Estas técnicas se logran principalmente en la definición de DSL, y algunas requieren unas cuantas líneas de código de programa.

  3. Amplíe las herramientas de modelado mediante código de programa. VMSDK está diseñado específicamente para facilitar la integración de las extensiones con el código que se genera a partir de la definición de DSL. Para obtener más información, consulte Escritura de código para personalizar un lenguaje específico de dominio.

Nota

Cuando haya actualizado el archivo de definiciones de DSL, no olvide hacer clic en Transformar todas las plantillas en la barra de herramientas del Explorador de soluciones antes de recompilar la solución.

Referencia de artículos

Para lograr este efecto Consulte este tema
Permita al usuario establecer las propiedades de color y estilo de una forma. Haga clic con el botón derecho en la forma o la clase de conector, seleccione Agregar expuesta y haga clic en un elemento.
Las distintas clases del elemento de modelo son similares en el diagrama y comparten propiedades como el alto y el ancho inicial, el color y la información sobre herramientas. Use la herencia entre formas o clases de conector. Las asignaciones entre las formas derivadas y las clases de dominio derivadas heredan los detalles de asignación de los elementos primarios.

O bien, asigne clases de dominio diferentes a la misma clase de forma.
Los distintos contextos de formas muestran una clase de elemento de modelo. Asigne más de una clase de forma a la misma clase de dominio. Al compilar la solución, siga el informe de errores y proporcione el código solicitado para decidir qué forma usar.
El color de la forma u otras características, como la fuente, indican el estado actual. Consulte Actualizar formas y conectores para reflejar el modelo.

Cree una regla que actualice las propiedades expuestas. Consulte Las reglas propagan los cambios dentro del modelo.

O bien, use OnAssociatedPropertyChanged() para actualizar características no expuestas, como las flechas de vínculo o la fuente.
Icono en los cambios de forma para indicar el estado. Establezca la visibilidad de la asignación de elemento Decorador en la ventana Detalles de DSL. Busque varios decoradores de imagen en la misma posición. Consulte Actualizar formas y conectores para reflejar el modelo.

O reemplace ImageField.GetDisplayImage(). Vea el ejemplo en ImageField.
Establecer una imagen de fondo en cualquier forma Reemplace InitializeInstanceResources() para agregar un elemento ImageField anclado.
Anidar formas a cualquier profundidad Configure un árbol de inserción recursivo. Defina BoundsRules que contengan las formas.
Adjunte conectores en puntos fijos en el límite de un elemento. Defina los elementos de terminal insertados, representados por puertos pequeños en el diagrama. Use BoundsRules para determinar los puertos. Consulte el ejemplo de diagrama de circuito en SDK de visualización y modelado.
El campo de texto muestra un valor derivado de otros valores. Asigne el decorador de texto a una propiedad de dominio de almacenamiento calculado o personalizado. Para obtener más información, consulte Propiedades de almacenamiento calculadas y personalizadas.
Propagar cambios entre elementos del modelo o entre formas Consulte Validación en los lenguajes específicos de dominio.
Propagar los cambios a recursos como otras extensiones de Visual Studio fuera del almacén. Consulte Los controladores de eventos propagan cambios fuera del modelo.
La ventana de propiedades muestra las propiedades de un elemento relacionado. Configure el reenvío de propiedades. Consulte Personalizar la ventana Propiedades.
Categorías de propiedades La ventana Propiedades se divide en secciones denominadas categorías. Establezca la categoría de las propiedades del dominio. Las propiedades con el mismo nombre de categoría aparecerán en la misma sección. También puede establecer la Categoría de un rol de relación.
Controlar el acceso de los usuarios a las propiedades del dominio Establezca Is Browsable en false para evitar que una propiedad de dominio aparezca en la ventana Propiedades en tiempo de ejecución. Todavía puede asignarla a decoradores de texto.

Is UI Read Only impide que los usuarios cambien una propiedad de dominio.

El acceso del programa a la propiedad de dominio no se ve afectado.
Cambie el nombre, el icono y la visibilidad de los nodos en el explorador de modelos de DSL. Consulte Personalizar el Explorador de modelos.
Habilitar copiar, cortar y pegar Active la propiedad Habilitar copiar y pegar del nodo Editor en el Explorador de DSL.
Copie los vínculos de referencia y sus destinos cada vez que se copie un elemento. Por ejemplo, copie los comentarios adjuntos a un elemento. Establezca la propiedad Propagates Copy del rol de origen (representada por la línea en un lado de la relación de dominio en el diagrama de definición de DSL).

Escriba código para invalidar ProcessOnCopy para lograr resultados más complejos.

Vea Personalizar comportamiento de copia.
Eliminar, cambiar el elemento principal o volver a vincular elementos relacionados cuando se elimina un elemento. Establezca el valor Propagates Delete de un rol de relación. Para resultados más complejos, reemplace los métodos ShouldVisitRelationship y ShouldVisitRolePlayer de la clase MyDslDeleteClosure, definidos en DomainModel.cs.
Conservar el diseño y la apariencia de la forma en las operaciones de copia y de arrastrar y colocar. Agregue las formas y los conectores al objeto copiado ElementGroupPrototype. El método más conveniente para reemplazar es ElementOperations.CreateElementGroupPrototype().

Vea Personalizar comportamiento de copia.
Pegar formas en la ubicación elegida, como la posición actual del cursor. Reemplace ClipboardCommandSet.ProcessOnCopy() para usar la versión específica de la ubicación de ElementOperations.Merge().. Vea Personalizar comportamiento de copia.
Crear vínculos adicionales al pegar Reemplace ClipboardCommandSet.ProcessOnPasteCommand().
Habilitar arrastrar y colocar desde este diagrama, otros elementos de DSL y Windows Consulte Adición de un controlador para arrastrar y colocar.
Permitir que una forma o herramienta se arrastren a una forma secundaria, como un puerto, como si se arrastrara al elemento primario. Defina una directiva de fusión de elementos mediante combinación en la clase de objeto de destino para reenviar el objeto colocado al elemento primario. Consulte Personalizar la creación y el movimiento de los elementos.
Permitir arrastrar una forma o herramienta a una forma y tener vínculos u objetos adicionales creados. Por ejemplo, para permitir que un comentario se coloque en un elemento al que se va a vincular. Defina una directiva de fusión de elementos mediante combinación en la clase de dominio de destino y defina los vínculos que se van a generar. En casos complejos, puede agregar código personalizado. Consulte Personalizar la creación y el movimiento de los elementos.
Cree un grupo de elementos con una herramienta. Por ejemplo, un componente con un conjunto fijo de puertos. Reemplace el método de inicialización del cuadro de herramientas en ToolboxHelper.cs. Cree un prototipo de grupo de elementos (EGP) que contenga los elementos y sus vínculos de relación. Vea Personalizar las herramientas y el cuadro de herramientas.

Incluya las formas de entidad de seguridad y puerto en el EGP o defina BoundsRules para colocar las formas de puerto cuando se crea una instancia de EGP.
Use una herramienta de conexión para crear instancias de varios tipos de relación. Agregue directivas de conexión de vínculos (LCD) al generador de conexiones invocado por la herramienta. Las LCD determinan el tipo de relación de los tipos de los dos elementos. Para que esto dependa de los estados de los elementos, puede agregar código personalizado. Vea Personalizar las herramientas y el cuadro de herramientas.
Herramientas permanentes: el usuario puede hacer doble clic en cualquier herramienta para crear muchas formas o conectores consecutivamente. En el Explorador de DSL, seleccione el nodo Editor. En el ventana Propiedades, establezca Usa elementos de cuadro de herramientas permanentes.
Definir los comandos de menú Consulte Modificación de comandos de menú estándar.
Restringir el modelo con reglas de validación Vea Validación en los lenguajes específicos de dominio.
Genere código, archivos de configuración o documentos a partir de un DSL. Generar código a partir de lenguajes específicos de dominio
Personalizar cómo se guardan los modelos en el archivo. Vea Personalizar el almacenamiento de archivos y la serialización XML.
Guardar los modelos en bases de datos u otros soportes físicos. Reemplace YourLanguageDocData

Vea Personalizar el almacenamiento de archivos y la serialización XML.
Integrar varios DSL para que funcionen como parte de una aplicación. Vea Integrar modelos utilizando Modelbus de Visual Studio.
Permitir que terceros amplíen el DSL y que este controle la extensión. Ampliar DSL mediante MEF

Compartir clases entre DSL mediante una biblioteca DSL

Definir una directiva de bloqueo para crear segmentos de solo lectura

Nota

El componente Transformación de plantilla de texto se instala de forma automática como parte de la carga de trabajo Desarrollo de extensiones de Visual Studio. También lo puede instalar desde la pestaña Componentes individuales del Instalador de Visual Studio, en la categoría SDK, bibliotecas y marcos. Instale el componente SDK de modelado desde la pestaña Componentes individuales.