Partilhar via


Personalizar e estender uma linguagem específica do domínio

O Visual Studio Modeling and Visualization SDK (VMSDK) fornece vários níveis nos quais você pode definir ferramentas de modelagem:

  1. Defina uma linguagem específica de domínio (DSL) usando o diagrama de definição DSL. Você pode criar rapidamente uma DSL com uma notação diagramática, um formulário XML legível e as ferramentas básicas necessárias para gerar código e outros artefatos. Para obter mais informações, consulte Como definir um idioma Domain-Specific.

  2. Ajuste a DSL utilizando as funcionalidades mais avançadas da sua definição. Por exemplo, você pode fazer com que links adicionais apareçam quando o usuário cria um elemento. Essas técnicas são alcançadas principalmente na definição DSL, e algumas requerem algumas linhas de código de programa.

  3. Estenda suas ferramentas de modelagem usando o código do programa. O VMSDK foi projetado especificamente para facilitar a integração de suas extensões com o código gerado a partir da definição DSL. Para obter mais informações, consulte Escrevendo código para personalizar um idioma Domain-Specific.

Observação

Depois de atualizar o arquivo de definições DSL, não se esqueça de clicar em Transformar todos os modelos na barra de ferramentas do Gerenciador de Soluções antes de reconstruir sua solução.

Referência do artigo

Para conseguir este efeito Consulte este tópico
Permitir que o usuário defina as propriedades de cor e estilo de uma forma. Clique com o botão direito do rato na forma ou na classe do conector, aponte para Adicionar Exposto e escolha um item.
Diferentes classes de elemento de modelo são semelhantes no diagrama, compartilhando propriedades como altura e largura iniciais, cor, dicas de ferramentas. Utilize a herança entre classes de formas ou conetores. Mapeamentos entre formas derivadas e classes de domínio derivadas herdam os detalhes de mapeamento dos pais.

Ou mapeie diferentes classes de domínio para a mesma classe de forma.
Uma classe de elemento de modelo é representada por diferentes formas em contextos. Mapeie mais de uma classe de forma para a mesma classe de domínio. Ao criar a solução, siga o relatório de erros e forneça o código solicitado para decidir qual forma usar.
A cor da forma ou outros recursos, como fonte, indicam o estado atual. Consulte Atualização de formas e conectores para refletir o modelo.

Crie uma regra que atualize as propriedades expostas. Consulte As regras propagam alterações dentro do modelo.

Ou, use OnAssociatedPropertyChanged() para atualizar recursos não expostos, como setas de link ou fonte.
O ícone na forma muda para indicar o estado. Defina a visibilidade do mapeamento do decorador na janela Detalhes DSL. Posicione vários decoradores de imagem na mesma posição. Consulte Atualização de formas e conectores para refletir o modelo.

Ou, substitua ImageField.GetDisplayImage(). Veja o exemplo em ImageField.
Definir uma imagem de fundo em qualquer forma Substitua InitializeInstanceResources() para adicionar um ImageField ancorado.
Aninhar formas a qualquer profundidade Configure uma árvore de incorporação recursiva. Defina BoundsRules para conter as formas.
Conecte conectores em pontos fixos no limite de um elemento. Defina elementos de terminal incorporados, representados por pequenas portas no diagrama. Utilize BoundsRules para fixar as portas em posição. Consulte o exemplo de diagrama de circuito em SDK de visualização e modelagem.
Campo de texto exibe um valor derivado de outros valores. Mapeie o decorador de texto para uma propriedade de domínio de Armazenamento Calculado ou de Armazenamento Personalizado. Para obter mais informações, consulte Propriedades de armazenamento calculadas e personalizadas.
Propagar alterações entre elementos do modelo ou entre formas Consulte Validação em um idioma Domain-Specific.
Propagar alterações a recursos, como outras extensões do Visual Studio, fora da loja. Consulte Manipuladores de eventos propagam alterações fora do modelo.
A janela Propriedade exibe as propriedades de um elemento relacionado. Configure o Encaminhamento de Propriedades. Consulte Personalizando a janela Propriedades.
Categorias de propriedades A janela de propriedades é dividida em seções chamadas categorias. Defina a Categoria das propriedades do seu domínio. Propriedades com o mesmo nome de categoria aparecerão na mesma seção. Você também pode definir a Categoria de uma função de relacionamento.
Controlar o acesso do usuário às propriedades do domínio Defina Is Browsable false para impedir que uma propriedade de domínio apareça na janela Propriedades em tempo de execução. Você ainda pode mapeá-lo para decoradores de texto.

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

O acesso do programa à propriedade de domínio não é afetado.
Altere o nome, o ícone e a visibilidade dos nós no explorador de modelos da DSL. Consulte Personalizando o Gerenciador de Modelos.
Ativar copiar, cortar e colar Defina a propriedade Enable Copy Paste do nó Editor no DSL Explorer.
Copie links de referência e seus destinos sempre que um elemento for copiado. Por exemplo, copie Comentários anexados a um item. Defina a propriedade Propagates Copy da função de origem (representada pela linha em um lado da relação de domínio no diagrama de definição DSL).

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

Consulte Personalizar o Comportamento de Cópia.
Exclua, redefina ou vincule novamente elementos relacionados quando um elemento for excluído. Defina o valor Propagates Delete de uma função de relacionamento. Para efeitos mais complexos, substituir os métodos ShouldVisitRelationship e ShouldVisitRolePlayer na classe MyDslDeleteClosure, definidos em DomainModel.cs.
Preserve o layout e a aparência da forma ao copiar e soltar. Adicione as formas e conectores ao arquivo ElementGroupPrototypecopiado. O método mais conveniente para substituir é ElementOperations.CreateElementGroupPrototype()

Consulte Personalizar o comportamento de cópia.
Cole formas num local escolhido, como a posição atual do cursor. Substitua ClipboardCommandSet.ProcessOnCopy() para usar a versão local específica de ElementOperations.Merge(). Consulte Personalizando o Comportamento de Cópia.
Criar links adicionais ao colar conteúdo Substituir ClipboardCommandSet.ProcessOnPasteCommand()
Habilite o recurso de arrastar e soltar a partir deste diagrama, de outras DSLs e de outros elementos do Windows Consulte Como: Adicionar um manipulador de arrastar e soltar
Permita que uma forma ou ferramenta seja arrastada para uma forma filha, como uma porta, como se fosse arrastada para a forma mãe. Defina uma Diretiva de Mesclagem de Elementos na classe de objeto de destino, para encaminhar o objeto descartado para o pai. Consulte Personalizando a criação e o movimento de elementos.
Permita que uma forma ou ferramenta seja arrastada para uma forma e tenha links ou objetos adicionais criados. Por exemplo, para permitir que um comentário seja solto em um item ao qual ele deve ser vinculado. Defina uma diretiva de mesclagem de elementos na classe de domínio de destino e defina os links 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. Sobreponha o método de inicialização da caixa de ferramentas no ToolboxHelper.cs. Crie um Protótipo de Grupo de Elementos (EGP) contendo os elementos e seus links de relacionamento. Consulte Ferramentas de personalização e a caixa de ferramentas.

Inclua as formas principal e de porta no EGP, ou defina BoundsRules para posicionar as formas de porta durante a instanciação do EGP.
Use uma ferramenta de conexão para instanciar vários tipos de relacionamento. Adicione Link Connect Directives (LCD) ao Connection Builder que é invocado pela ferramenta. Os LCDs determinam o tipo de relação a partir dos tipos dos dois elementos. Para fazer isso depender dos estados dos elementos, você pode adicionar código personalizado. Consulte Ferramentas de personalização e a caixa de ferramentas.
Ferramentas adesivas - o usuário pode clicar duas vezes em qualquer ferramenta para criar muitas formas ou conectores em sucessão. Selecione o nó Editor no DSL Explorer. Na janela Propriedades, defina Usa itens adesivos da caixa de ferramentas.
Definir comandos de menu Consulte Como: Modificar um comando de menu padrão
Restringir o modelo com regras de validação Consulte Validação em um idioma Domain-Specific
Gere código, arquivos de configuração ou documentos a partir de uma DSL. Gerando código a partir de uma linguagem Domain-Specific
Personalize como os modelos são salvos no arquivo. Consulte Personalizando o armazenamento de arquivos e a serialização XML
Salve modelos em bancos de dados ou outras mídias. Substituir YourLanguageDocData

Consulte Personalizando o armazenamento de arquivos e a serialização XML
Integre várias DSLs para que elas funcionem como parte de um aplicativo. Consulte Integrando modelos usando o Visual Studio Modelbus.
Permita que a sua DSL seja estendida por terceiros e tenha controlo sobre a extensão. Estenda sua DSL usando MEF

Compartilhando classes entre DSLs usando uma biblioteca DSL

Definição de uma política de bloqueio para criar segmentos de apenas leitura

Observação

O componente Transformação de modelo de texto é instalado automaticamente como parte da carga de trabalho de desenvolvimento de extensão do Visual Studio . Você também pode instalá-lo na guia Componentes individuais do Visual Studio Installer, na categoria SDKs, bibliotecas e estruturas . Instale o componente SDK de modelagem na guia Componentes individuais .