Partilhar via


Personalizando e estendendo uma linguagem específica do domínio

Visual Studio de modelagem e visualização SDK (VMSDK) fornece vários níveis em que você pode definir as ferramentas de modelagem:

  1. Defina uma linguagem específica de domínio (DSL) usando o diagrama de definição de DSL. Você pode criar rapidamente uma DSL com uma notação diagramáticas, uma forma legível do XML e as ferramentas básicas que são necessários para gerar o código e outros artefatos.

    Para obter mais informações, consulte Como definir uma linguagem específica do domínio.

  2. Ajuste a DSL, usando os recursos mais avançados da definição de DSL. Por exemplo, você pode fazer com que links adicionais aparecem quando o usuário cria um elemento. Essas técnicas são atingidas principalmente na definição de DSL e alguns requerem algumas linhas de código de programa.

  3. Estenda suas ferramentas de modelagem usando o código de programa. VMSDK foi projetado especificamente para facilitar a integração de suas extensões com o código que é gerado a partir da definição de DSL. Para obter mais informações, consulte Escrevendo código para personalizar uma linguagem específica do domínio.

Dica

Quando você atualizar o arquivo de definições de DSL, não se esqueça clique Transformar todos os modelos de na barra de ferramentas do Solution Explorer antes de recriar a sua solução.

Nesta seção

Para obter esse efeito.

Consulte este tópico.

Permitir ao usuário definir as propriedades de estilo e a cor de uma forma.

A classe shape ou conector de atalho, aponte para Adicionar expostose clique em um item.

Consulte Personalizando a apresentação no diagrama.

Classes diferentes de elemento de modelo semelhante no diagrama, o compartilhamento de propriedades como inicial altura e largura, cor, dicas de ferramentas.

Use a herança entre classes de conector ou formas. Mapeamentos entre formas derivadas e classes de domínio derivadas herdam os detalhes de mapeamento dos pais.

Ou então, mapear classes de domínio diferente para a mesma classe de forma.

Uma classe de elemento de modelo é exibida por contextos de formas diferentes.

Mapear mais de uma classe de forma para a mesma classe de domínio. Quando você compila a solução, execute o relatório de erros e forneça o código solicitado para decidir qual forma será usada.

Cor da forma ou outros recursos, como fonte indicam o estado atual.

Consulte Atualizando formas e conectores para refletir o modelo.

Crie uma regra que atualiza as propriedades expostas. Consulte Regras propagam alterações dentro do modelo.

Ou, use OnAssociatedPropertyChanged() para atualizar os recursos não-exposto como, por exemplo, setas de link ou a fonte.

Ícone de alterações de forma para indicar o estado.

Defina a visibilidade do decorador mapeamento na janela de detalhes de DSL. Localize vários decoradores de imagem na mesma posição. See Atualizando formas e conectores para refletir o modelo.

Ou então, substituir ImageField.GetDisplayImage(). Veja exemplo na ImageField.

Definir uma imagem de plano de fundo em qualquer forma

Substitua InitializeInstanceResources() para adicionar um ImageField ancorado. Consulte Personalizando a apresentação no diagrama.

Formas de aninhar a qualquer profundidade

Configure uma recursiva a incorporação de árvore. Defina BoundsRules para conter as formas. Consulte Personalizando a apresentação no diagrama.

Anexe conectores em pontos fixos no limite de um elemento.

Defina elementos incorporados de terminal, representados por pequenas portas no diagrama. Use BoundsRules para corrigir as portas no lugar. Consulte exemplo de diagrama de circuito em SDK de modelagem e visualização.

Campo de texto exibe um valor derivado de outros valores.

Mapear o decorador de texto para uma propriedade de domínio calculado ou armazenamento personalizado. Para obter mais informações, consulte Propriedades calculadas e de armazenamento personalizado.

Propagar alterações entre elementos de modelo ou entre formas

Consulte Validação em uma linguagem específica do domínio.

Propagar alterações para recursos como outros Visual Studio extensões para fora do armazenamento.

Consulte Manipuladores de eventos propagam alterações fora do modelo.

Janela de propriedades exibe as propriedades de um elemento relacionado.

Configure o encaminhamento de propriedade. Consulte Personalizando a janela de propriedades.

Categorias de propriedade

A janela Propriedades é dividida em seções chamadas categorias. Definir o categoria de suas propriedades de domínio. As propriedades com o mesmo nome de categoria serão exibidas na mesma seção. Você também pode definir o categoria de uma função de relacionamento.

Controle o acesso do usuário para propriedades de domínio

Definir É navegável false para impedir que uma propriedade de domínio que aparecem na janela Propriedades em tempo de execução. Você ainda poderá mapeá-lo para decoradores de texto.

É somente leitura da interface do usuário impede que os usuários alterem uma propriedade de domínio.

Programa acesse a propriedade de domínio não é afetado.

Altere o nome, ícone e visibilidade de nós no Gerenciador de modelos do seu DSL.

Consulte Personalizando o Gerenciador de Modelos.

Habilitar a copiar, recortar e colar

Definir o Permitem copiar colar propriedade da Editor nó no Explorer DSL.

Copie os links de referência e seus destinos, sempre que um elemento é copiado. Por exemplo, copie os comentários anexados a um item.

Definir o Propaga Copy a propriedade da função de origem (representada pela linha em um dos lados da relação de domínio no diagrama de definição de DSL).

Escreva código para substituir o ProcessOnCopy para obter efeitos mais complexos.

Consulte Personalizando o comportamento da operação de copiar.

Excluir, reassociar ou vincular novamente os elementos relacionados quando um elemento é excluído.

Definir o Propaga excluir o valor de uma função de relacionamento. Para obter efeitos mais complexos, substituir ShouldVisitRelationship e ShouldVisitRolePlayer métodos na MyDslDeleteClosure classe, definida naDomainModel.cs

Consulte Personalizando o comportamento da operação de excluir.

Preserve o layout de forma e a aparência em copiar e arrastar e soltar.

Adicionar as formas e conectores para o copiada ElementGroupPrototype. O método mais conveniente para substituir éElementOperations.CreateElementGroupPrototype()

Consulte Personalizando o comportamento da operação de copiar.

Colar formas em um local escolhido, como, por exemplo, a posição atual do cursor.

Substituir ClipboardCommandSet.ProcessOnCopy() para usar a versão específica do local do ElementOperations.Merge(). consulte Personalizando o comportamento da operação de copiar.

Criar links adicionais ao colar

Substituir ClipboardCommandSet.ProcessOnPasteCommand()

Habilitar arrastar e soltar neste diagrama, outras DSLs ou UML diagramas e elementos do Windows

Consulte Como adicionar um manipulador de evento de arrastar e soltar.

Permitir que uma forma ou a ferramenta sejam arrastados para uma forma filho, como, por exemplo, uma porta, como se ele foram arrastado para o pai.

Defina uma diretiva de mesclagem do elemento da classe de objeto de destino, para encaminhar o objeto solto ao pai. Consulte Personalizando a criação e o movimento de elementos.

Permitir que uma forma ou a ferramenta sejam arrastados para uma forma e ter o links adicionais ou objetos criados. Por exemplo, para permitir que um comentário para ser solto sobre um item ao qual é a ser vinculado.

Definir uma diretiva de mesclagem do elemento na classe de domínio de destino e defina os vínculos a serem gerados. Em casos complexos, você pode adicionar código personalizado. Consulte Personalizando a criação e o movimento de elementos.

Crie um grupo de elementos com uma ferramenta. Por exemplo, um componente com um conjunto fixo de portas.

Substitua o método de inicialização da caixa de ferramentas em ToolboxHelper.cs. Crie um protótipo de grupo de elemento (EGP) que contém os elementos e os links de relacionamento. Consulte Personalizando ferramentas e a caixa de ferramentas.

Incluir as formas entidade e a porta no EGP, ou definir o BoundsRules ao posicionar as formas de porta quando o EGP é instanciado. Consulte BoundsRules restringem o local e o tamanho de uma forma.

Use uma ferramenta de conexão para criar uma instância de vários tipos de relacionamento.

Adicione diretivas de conectar-se de Link (LCD) para o construtor de conexão que é invocado pela ferramenta. Os LCDs determinam o tipo da relação dos tipos de dois elementos. Para fazer isso dependem os estados dos elementos, você pode adicionar código personalizado. Consulte Personalizando ferramentas e a caixa de ferramentas.

Ferramentas de auto-adesivas – o usuário pode clicar duas vezes qualquer ferramenta para criar muitas formas ou conectores em sucessão.

No Explorer DSL, selecione o Editor nó. Na janela Properties, defina Usa itens de caixa de ferramentas de auto-adesivas.

Definir os comandos de menu

Consulte Como modificar um comando de menu padrão em uma linguagem específica do domínio.

Restringir o modelo com as regras de validação

Consulte Validação em uma linguagem específica do domínio.

Gere código, documentos ou arquivos de configuração a partir de uma DSL.

Gerando código a partir de uma linguagem específica do domínio

Personalizar a forma como os modelos são salvas em arquivo.

Consulte Personalizando o armazenamento de arquivos e a serialização XML.

Salve modelos para bancos de dados ou outra mídia.

Substituir YourLanguageDocData

Consulte Personalizando o armazenamento de arquivos e a serialização XML.

Integre diversas DSLs para que funcionem como parte de um aplicativo.

Consulte Integrando modelos por meio do Visual Studio Modelbus.

Permitir que seu DSL para serem estendidos por terceiros e controlar a extensão.

Estender a DSL usando MEF

Compartilhando classes entre DSLs por meio de uma biblioteca de DSLs

Definindo uma política de bloqueio para criar segmentos somente leitura

Consulte também

Conceitos

Como definir uma linguagem específica do domínio

SDK de Modelagem para Visual Studio - linguagens específicas ao domínio

Outros recursos

Escrevendo código para personalizar uma linguagem específica do domínio