Personalizar e estender uma linguagem específica de domínioCustomize and extend a domain-specific language

O Visual Studio Modeling VMSDK (SDK de modelagem e visualização) fornece vários níveis nos quais você pode definir ferramentas de modelagem:Visual Studio Modeling and Visualization SDK (VMSDK) provides several levels at which you can define modeling tools:

  1. Defina uma linguagem de domínio específico (DSL) usando o diagrama de definição de DSL.Define a domain-specific language (DSL) using the DSL Definition diagram. Você pode criar rapidamente uma DSL com uma notação diagramáticas, um formulário XML legível e as ferramentas básicas que são necessárias para gerar código e outros artefatos.You can quickly create a DSL with a diagrammatic notation, a readable XML form, and the basic tools that are required to generate code and other artifacts. Para obter mais informações, consulte como definir um idioma de Domain-Specific.For more information, see How to Define a Domain-Specific Language.

  2. Ajuste a DSL usando recursos mais avançados da definição de DSL.Fine-tune the DSL by using more advanced features of the DSL Definition. Por exemplo, você pode fazer os links adicionais aparecerem quando o usuário criar um elemento.For example, you can make additional links appear when the user creates an element. Essas técnicas são mais obtidas na definição de DSL e algumas exigem algumas linhas de código de programa.These techniques are mostly achieved in the DSL Definition, and some require a few lines of program code.

  3. Estenda suas ferramentas de modelagem usando o código do programa.Extend your modeling tools by using program code. O VMSDK foi projetado especificamente para facilitar a integração de suas extensões com o código gerado a partir da Definição de DSL.VMSDK is designed specifically to make it easy to integrate your extensions with the code that is generated from the DSL Definition. Para obter mais informações, consulte escrevendo código para personalizar um idioma de Domain-Specific.For more information, see Writing Code to Customize a Domain-Specific Language.

Observação

Quando você tiver atualizado o arquivo de definições de DSL, não se esqueça de clicar em transformar todos os modelos na barra de ferramentas de Gerenciador de soluções antes de recompilar sua solução.When you have updated the DSL Definitions file, don't forget to click Transform All Templates in the toolbar of Solution Explorer before rebuilding your solution.

Referência do artigoArticle reference

Para obter esse efeitoTo achieve this effect Consulte este tópicoRefer to this topic
Permite que o usuário defina as propriedades de cor e estilo de uma forma.Allow the user to set the color and style properties of a shape. Clique com o botão direito do mouse na classe de forma ou conector, aponte para Adicionar exposto e clique em um item.Right-click the shape or connector class, point to Add Exposed, and click an item.
Classes diferentes de elementos de modelo são semelhantes no diagrama, compartilhando propriedades como altura inicial e largura, cor, dicas de ferramenta.Different classes of model element look similar on the diagram, sharing properties such as initial height and width, color, tooltips. Use a herança entre formas ou classes de conector.Use inheritance between shapes or connector classes. Mapeamentos entre formas derivadas e classes de domínio derivadas herdam os detalhes de mapeamento dos pais.Mappings between derived shapes and derived domain classes inherit the mapping details of the parents.

Ou mapear classes de domínio diferentes para a mesma classe de forma.Or, map different domain classes to the same shape class.
Uma classe de elemento de modelo é exibida por contextos de formas diferentes.A class of model element is displayed by different shapes contexts. Mapeie mais de uma classe de forma para a mesma classe de domínio.Map more than one shape class to the same domain class. Ao criar a solução, siga o relatório de erros e forneça o código solicitado para decidir qual forma usar.When you build the solution, follow the error report and provide the requested code to decide what shape to use.
Cor da forma ou outros recursos como fonte indicam o estado atual.Shape color or other features such as font indicate current state. Consulte atualizando formas e conectores para refletir o modelo.See Updating Shapes and Connectors to Reflect the Model.

Crie uma regra que atualize as propriedades expostas.Create a rule that updates the exposed properties. Consulte regras propagar alterações no modelo.See Rules Propagate Changes Within the Model.

Ou use OnAssociatedPropertyChanged () para atualizar recursos não expostos, como setas de link ou fonte.Or, use OnAssociatedPropertyChanged() to update non-exposed features such as link arrows or font.
Ícone de alterações de forma para indicar estado.Icon on shape changes to indicate state. Defina a visibilidade do mapeamento de decorador na janela detalhes de DSL.Set the visibility of the decorator mapping in the DSL Details window. Localize vários decoradores de imagem na mesma posição.Locate several image decorators on the same position. Consulte atualizando formas e conectores para refletir o modelo.See Updating Shapes and Connectors to Reflect the Model.

Ou, substitua ImageField.GetDisplayImage() .Or, override ImageField.GetDisplayImage(). Consulte o exemplo em ImageField .See example in ImageField.
Definir uma imagem de plano de fundo em qualquer formaSet a background image on any shape Substitua InitializeInstanceResources () para adicionar um ImageField ancorado.Override InitializeInstanceResources() to add an anchored ImageField.
Aninhe formas em qualquer profundidadeNest shapes to any depth Configure uma árvore de incorporação recursiva.Set up a recursive embedding tree. Defina BoundsRules para conter as formas.Define BoundsRules to contain the shapes.
Anexe conectores em pontos fixos no limite de um elemento.Attach connectors at fixed points on an element's boundary. Defina elementos de terminal inseridos, representados por portas pequenas no diagrama.Define embedded terminal elements, represented by small ports on the diagram. Use BoundsRules para corrigir as portas em vigor.Use BoundsRules to fix the ports in place. Consulte o exemplo de diagrama de circuito na visualização e no SDK de modelagem.See the Circuit Diagram sample at Visualization and Modeling SDK.
O campo de texto exibe um valor derivado de outros valores.Text field displays a value derived from other values. Mapeie o decorador de texto para uma propriedade de domínio de armazenamento calculada ou personalizada.Map the text decorator to a Calculated or Custom Storage domain property. Para obter mais informações, consulte Propriedades de armazenamento calculadas e personalizadas.For more information, see Calculated and Custom Storage Properties.
Propagar alterações entre elementos de modelo ou entre formasPropagate changes between model elements, or between shapes Consulte validação em um idioma Domain-Specific.See Validation in a Domain-Specific Language.
Propague alterações para recursos como outras extensões do Visual Studio fora da loja.Propagate changes to resources such as other Visual Studio extensions outside the store. Consulte manipuladores de eventos propagar alterações fora do modelo.See Event Handlers Propagate Changes Outside the Model.
Janela de Propriedades exibe as propriedades de um elemento relacionado.Property window displays properties of a related element. Configure o encaminhamento de propriedade.Set up Property Forwarding. Consulte Personalizando a janela Propriedades.See Customizing the Properties Window.
Categorias de propriedadeProperty categories A janela Propriedades é dividida em seções chamadas categorias.The properties window is divided into sections called categories. Defina a categoria de suas propriedades de domínio.Set the Category of your domain properties. As propriedades com o mesmo nome de categoria serão exibidas na mesma seção.Properties with the same category name will appear in the same section. Você também pode definir a categoria de uma função de relação.You can also set the Category of a relationship role.
Controlar o acesso do usuário às propriedades do domínioControl user access to domain properties Set é navegável false para impedir que uma propriedade de domínio apareça no janela Propriedades em tempo de execução.Set Is Browsable false to prevent a domain property from appearing in the Properties window at run time. Você ainda pode mapeá-lo para decoradores de texto.You can still map it to text decorators.

A interface do usuário é somente leitura impede que os usuários alterem uma propriedade de domínio.Is UI Read Only prevents users from changing a domain property.

O acesso do programa à propriedade de domínio não é afetado.Program access to the domain property is not affected.
Altere o nome, o ícone e a visibilidade dos nós no Gerenciador de modelos de sua DSL.Change the name, icon, and visibility of nodes in your DSL's model explorer. Consulte Personalizando o Gerenciador de modelos.See Customizing the Model Explorer.
Habilitar copiar, recortar e colarEnable copy, cut and paste Defina a propriedade habilitar copiar colar do nó do Editor no Gerenciador de DSL.Set the Enable Copy Paste property of the Editor node in DSL Explorer.
Copie links de referência e seus destinos sempre que um elemento for copiado.Copy reference links and their targets whenever an element is copied. Por exemplo, copie os comentários anexados a um item.For example, copy Comments attached to an item. Defina a propriedade de cópia propagada da função de origem (representada pela linha em um lado da relação de domínio no diagrama de definição de DSL).Set the Propagates Copy property of the source role (represented by the line at one side of the domain relationship in the DSL Definition diagram).

Escreva o código para substituir ProcessOnCopy para obter efeitos mais complexos.Write code to override ProcessOnCopy to achieve more complex effects.

Consulte Personalizando o comportamento de cópia.See Customizing Copy Behavior.
Excluir, repai ou vincular novamente os elementos relacionados quando um elemento é excluído.Delete, reparent, or relink related elements when an element is deleted. Defina o valor de exclusão de propagações de uma função de relação.Set the Propagates Delete value of a relationship role. Para efeitos mais complexos, substitua ShouldVisitRelationship e ShouldVisitRolePlayer métodos na MyDslDeleteClosure classe, definidos em DomainModel.cs.For more complex effects, override ShouldVisitRelationship and ShouldVisitRolePlayer methods in the MyDslDeleteClosure class, defined in DomainModel.cs.
Preserve o layout de forma e a aparência em copiar e arrastar e soltar.Preserve shape layout and appearance on copy and drag-drop. Adicione as formas e os conectores aos copiados ElementGroupPrototype .Add the shapes and connectors to the copied ElementGroupPrototype. O método mais conveniente para substituir é ElementOperations.CreateElementGroupPrototype()The most convenient method to override is ElementOperations.CreateElementGroupPrototype()

Consulte Personalizando o comportamento de cópia.See Customizing Copy Behavior.
Cole formas em um local escolhido, como a posição atual do cursor.Paste shapes in a chosen location, such as the current cursor position. Substitua ClipboardCommandSet.ProcessOnCopy() para usar a versão específica de local do ElementOperations.Merge(). consulte Personalizando o comportamento de cópia.Override ClipboardCommandSet.ProcessOnCopy() to use the location-specific version of ElementOperations.Merge(). See Customizing Copy Behavior.
Criar links adicionais ao colarCreate additional links on paste Substituir ClipboardCommandSet. ProcessOnPasteCommand ()Override ClipboardCommandSet.ProcessOnPasteCommand()
Habilitar arrastar e soltar deste diagrama, outras DSLs e elementos do WindowsEnable drag and drop from this diagram, other DSLs and Windows elements Consulte como: adicionar um manipulador de arrastar e soltarSee How to: Add a Drag-and-Drop Handler
Permite que uma forma ou ferramenta seja arrastada para uma forma filho, como uma porta, como se ela fosse arrastada para o pai.Allow a shape or tool to be dragged onto a child shape, such as a port, as if it were dragged onto the parent. Defina uma diretiva de mesclagem de elementos na classe de objeto de destino para encaminhar o objeto Descartado para o pai.Define an Element Merge Directive on the target object class, to forward the dropped object to the parent. Consulte Personalizando a criação e movimentação de elementos.See Customizing Element Creation and Movement.
Permite que uma forma ou ferramenta seja arrastada para uma forma e tenha links ou objetos adicionais criados.Allow a shape or tool to be dragged onto a shape and have additional links or objects created. Por exemplo, para permitir que um comentário seja descartado em um item ao qual ele será vinculado.For example, to allow a comment to be dropped onto an item to which it is to be linked. Defina uma diretiva de mesclagem de elementos na classe de domínio de destino e defina os links a serem gerados.Define an Element Merge Directive on the target domain class, and define the links to be generated. Em casos complexos, você pode adicionar código personalizado.In complex cases, you can add custom code. Consulte Personalizando a criação e movimentação de elementos.See Customizing Element Creation and Movement.
Crie um grupo de elementos com uma ferramenta.Create a group of elements with one tool. Por exemplo, um componente com um conjunto fixo de portas.For example, a component with a fixed set of ports. Substitua o método de inicialização da caixa de ferramentas em ToolboxHelper.cs.Override the toolbox initialization method in ToolboxHelper.cs. Crie um protótipo de grupo de elementos (EGP) contendo os elementos e seus links de relacionamento.Create an Element Group Prototype (EGP) containing the elements and their relationship links. Consulte Personalizando ferramentas e a caixa de ferramentas.See Customizing Tools and the Toolbox.

Inclua as formas de entidade e de porta no EGP, ou defina BoundsRules para posicionar as formas de porta quando o EGP for instanciado.Either include the principal and port shapes in the EGP, or define BoundsRules to position the port shapes when the EGP is instantiated.
Use uma ferramenta de conexão para criar uma instância de vários tipos de relação.Use one connection tool to instantiate several types of relationship. Adicione as diretivas de conexão de link (LCD) ao construtor de conexões que é invocado pela ferramenta.Add Link Connect Directives (LCD) to the Connection Builder that is invoked by the tool. Os LCDs determinam o tipo da relação dos tipos dos dois elementos.The LCDs determine the type of the relationship from the types of the two elements. Para fazer isso depender dos Estados dos elementos, você pode adicionar código personalizado.To make this depend on the states of the elements, you can add custom code. Consulte Personalizando ferramentas e a caixa de ferramentas.See Customizing Tools and the Toolbox.
Ferramentas adesivas – o usuário pode clicar duas vezes em qualquer ferramenta para criar muitas formas ou conectores sucessivamente.Sticky tools - the user can double-click any tool to create many shapes or connectors in succession. No Gerenciador de DSL, selecione o Editor nó.In DSL Explorer, select the Editor node. Na janela Propriedades, Set usa itens de caixa de ferramentas adesivas.In the Properties window, set Uses Sticky Toolbox Items.
Definir comandos de menuDefine menu commands Consulte como: modificar um comando de menu padrãoSee How to: Modify a Standard Menu Command
Restringir o modelo com regras de validaçãoConstrain the model with validation rules Consulte validação em um idioma Domain-SpecificSee Validation in a Domain-Specific Language
Gere código, arquivos de configuração ou documentos de uma DSL.Generate code, configuration files, or documents from a DSL. Gerando código a partir de uma linguagem específica do domínioGenerating Code from a Domain-Specific Language
Personalize como os modelos são salvos no arquivo.Customize how models are saved to file. Consulte Personalizando o armazenamento de arquivos e a serialização de XMLSee Customizing File Storage and XML Serialization
Salve modelos em bancos de dados ou em outras mídias.Save models to databases or other media. Substituir DocData YourLanguageOverride YourLanguage DocData

Consulte Personalizando o armazenamento de arquivos e a serialização de XMLSee Customizing File Storage and XML Serialization
Integre várias DSLs para que elas funcionem como parte de um aplicativo.Integrate several DSLs so that they work as part of one application. Consulte integrando modelos usando o Visual Studio ModelBus.See Integrating Models by using Visual Studio Modelbus.
Permita que sua DSL seja estendida por terceiros e controle a extensão.Allow your DSL to be extended by third parties, and control the extension. Estender a DSL usando MEFExtend your DSL by using MEF

Compartilhando classes entre DSLs por meio de uma biblioteca de DSLsSharing Classes between DSLs by using a DSL Library

Definindo uma política de bloqueio para criar segmentos somente leituraDefining a Locking Policy to Create Read-Only Segments

Consulte tambémSee also

Observação

O componente de transformação de modelo de texto é instalado automaticamente como parte da carga de trabalho de desenvolvimento de extensão do Visual Studio .The Text Template Transformation component is automatically installed as part of the Visual Studio extension development workload. Você também pode instalá-lo na guia componentes individuais do instalador do Visual Studio, na categoria SDKs, bibliotecas e estruturas .You can also install it from the Individual components tab of Visual Studio Installer, under the SDKs, libraries, and frameworks category. Instale o componente SDK de modelagem da guia componentes individuais .Install the Modeling SDK component from the Individual components tab.