Compartilhar via


Como definir uma linguagem específica de domínio

Para definir uma linguagem específica de domínio (DSL), que você crie um Visual Studio solução a partir de um modelo.A parte fundamental da solução é o diagrama de definição de DSL, que é armazenado em DslDefinition.dsl.A definição de DSL define as classes e as formas de DSL.Depois que você modifique e adicionando a esses elementos, você pode adicionar código de programa para personalizar o DSL mais detalhadamente.

Se você for inexperiente em DSLs, recomendamos que você trabalhe através do DSL Tools Lab, que pode ser encontrada neste site: Visualizaton e o SDK de modelagem

Neste tópico.

Selecionar uma solução de modelo

Padrões para definir uma DSL

Classes de elemento de modelo

Formas no diagrama

Referências e conectores

Formas que contêm listas: formas de compartimento

Portas no limite de outra forma

Raias

Tipos de propriedade

Personalizando seu DSL.

Solução de problemas

Selecionar uma solução de modelo

Para definir uma DSL, você deve ter instalado os seguintes componentes:

Visual Studio

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

SDK do Visual Studio

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

SDK de modelagem e visualização de Visual Studio

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

Para criar uma nova linguagem específica do domínio, crie um novo Visual Studio solução usando o modelo de projeto de linguagem específica de domínio.

Para criar uma solução DSL

  1. Criar uma solução com o Linguagem específica de domínio modelo, que pode ser encontrado em Tipos de projeto Other/extensibilidade na Novo projeto caixa de diálogo.

    Criar caixa de diálogo DSL

    Quando você clica em OK, o Assistente de linguagem específica do domínio abre e exibe uma lista de soluções DSL modelo.

  2. Clique em cada modelo para ver uma descrição.Escolha a solução que mais parecida com o que você deseja criar.

    Cada modelo DSL define uma DSL em funcionamento básico.Você editará essa DSL para se ajustar suas próprias necessidades.

    Clique em cada amostra para obter mais informações.

    • Selecione Tarefas de fluxo para criar uma DSL que tenha as raias.As raias são partições verticais ou horizontais do diagrama.

    • Selecione Modelos de componente para criar uma DSL que tem portas.As portas são pequenas formas na borda de uma forma maior.

    • Selecione Diagramas de classe para definir uma DSL que tem formas de compartimento.Formas de compartimento contêm listas de itens.

    • Selecione Mínimo idioma em outros casos, ou se não estiver certo.

      ObservaçãoObservação

      Se você deseja criar um diagrama de classe ou diagrama de componente, considere o uso de modelos UML.As ferramentas de modelagem UML fornecem um conjunto de diagramas que estão integrados ao redor de um único modelo.Eles são extensíveis e podem ser integrados com seu DSL usando ModelBus.Para obter mais informações, consulte Desenvolvendo modelos para design de software.

    • Selecione Mínimo Designer do WinForm ou Mínimo WPF Designer para criar uma DSL que é exibida em uma superfície de Windows Forms ou WPF.Você terá de escrever código para definir o editor.Para obter mais informações, consulte os seguintes tópicos:

      A criação de um idioma do Windows baseada em formulários específicos do domínio

      A criação de uma linguagem de domínio específico baseado no WPF

  3. Digite uma extensão de nome de arquivo para seu DSL na página do assistente apropriado.Esta é a extensão de arquivos que contém as ocorrências de seu DSL usarão.

    • Escolha uma extensão de nome de arquivo que não está associada a qualquer aplicativo em seu computador ou em qualquer computador em que você deseja instalar o DSL.Por exemplo, docx e htm poderia ser extensões de nome de arquivo inaceitável.

    • O assistente irá avisá-lo se a extensão que você digitou está sendo usada como uma DSL.Considere o uso de uma extensão de nome de arquivo diferente.Você também pode redefinir a instância Visual Studio SDK Experimental para limpar os designers experimentais antigos.Clique em Iniciar, clique em Todos os programas, Microsoft Visual Studio 2010 SDK, Ferramentase, em seguida Redefinir a instância do Microsoft Visual Studio 2010 Experimental.

  4. Você pode ajustar as configurações nas outras páginas, ou deixe os valores padrão.

  5. Clique em Finish.

    O assistente cria uma solução que contém dois ou três projetos e gera código a partir da definição de DSL.

Agora, a interface do usuário é semelhante a figura a seguir.

designer DSL

A solução define um idioma específico do domínio.Para obter mais informações, consulte Visão geral da Interface do usuário de ferramentas específicas de domínio idioma.

Bb126581.collapse_all(pt-br,VS.110).gifTestar a solução

A solução de modelo fornece uma DSL, que você pode modificar ou usar como está em funcionamento.

Para testar a solução, pressione F5 ou CTRL + F5.Uma nova instância do Visual Studio é aberto no modo experimental.

Na nova instância de Visual Studio, no Solution Explorer, abra o arquivo de exemplo.Ele abre como um diagrama, uma caixa de ferramentas.

Se você executar uma solução que você tenha criado a partir do Mínimo idioma modelo, seu experimental Visual Studio parecerá com o exemplo a seguir:

Bb126581.DSL_min(pt-br,VS.110).png

Experimente as ferramentas.Criar elementos e conectá-los.

Feche a instância experimental do Visual Studio.

ObservaçãoObservação

Quando você tiver modificado o DSL, você poderá mais ver as formas na amostra de arquivo de teste.No entanto, você poderá criar novos elementos.

Bb126581.collapse_all(pt-br,VS.110).gifModificando o modelo de DSL

Renomeie e manter algumas ou todas as classes de domínio e as classes de forma no modelo de definição de DSL.Os novos nomes de classe devem ser nomes válidos do CLR, sem espaços ou pontuação.

Ela é especialmente útil manter essas classes:

  • A classe raiz é exibido no canto superior esquerdo do diagrama de definição de DSL, em Classes e relacionamentos.Renomeie-o para um nome diferente do DSL.Por exemplo, uma DSL denominada MusicLibrary pode ter uma classe raiz denominada música.

  • A classe do diagrama aparece no canto inferior direito do diagrama de definição de DSL, na Elementos de diagrama coluna.Talvez você precise rolar para a direita para vê-lo.Ele é normalmente denominado YourDsldiagrama.

  • Se você usou o O fluxo de tarefas modelo e quiser criar diagramas com raias, manter e renomeie a classe de domínio do ator e a forma de ActorSwimlane.

Exclua ou renomeie a outras classes de acordo com suas necessidades.

Padrões para definir uma DSL

Recomendamos que você desenvolva uma DSL, adicionando ou ajustando os recursos de um ou dois ao mesmo tempo.Adicionar um recurso, execute o DSL e testá-lo e, em seguida, adicionar mais recursos de um ou dois.Pode ser um recurso típico do seu DSL:

  • Uma classe de domínio, a relação de incorporação que conecta o elemento para o modelo, a forma necessário para exibir os elementos dessa classe no diagrama e a ferramenta de elemento que permite aos usuários criar elementos.

  • As propriedades do domínio de uma classe de domínio e os decoradores que exibi-los em uma forma.

  • Um relacionamento de referência e o conector que exibe no diagrama e a ferramenta de conector que permite aos usuários criam vínculos.

  • Uma personalização que requer um código de programa, como, por exemplo, um comando de menu ou de uma restrição de validação.

As seções a seguir descrevem como construir os tipos mais úteis dos recursos DSL.Há muitos outros padrões, com o qual pode ser construída uma DSL, mas eles são usados com mais freqüência.

ObservaçãoObservação

Depois de adicionar um recurso, não se esqueça clique Transformar todos os modelos de na barra de ferramentas do Solution Explorer antes de construir e executar seu DSL.

A figura a seguir mostra parte de classes e relacionamentos de DSL que é usado como exemplo neste tópico.

Relações de referência e incorporação

A próxima figura é um modelo de exemplo dessa DSL:

Modelo de instância de DSL gerado

ObservaçãoObservação

"Modelo" refere-se a uma instância do seu DSL que os usuários criam e normalmente é exibido como um diagrama.Este tópico discute tanto os diagramas de modelo que aparecem quando seu DSL é usado como o diagrama de definição de DSL.

Definir Classes de domínio

Classes de domínio representam os conceitos de seu DSL.As instâncias são elementos de modelo.Por exemplo em uma DSL de MusicLibrary, você pode ter Classes de domínio chamado álbum e música.

Para criar uma classe de domínio, você pode arrastar da A classe de domínio chamado ferramenta para o diagrama e, em seguida, renomeie a classe.

Para obter mais informações, consulte Propriedades das Classes de domínio.

Bb126581.collapse_all(pt-br,VS.110).gifCriar um relacionamento de incorporação para cada classe de domínio

Cada classe de domínio, exceto a classe raiz deve ser o destino de pelo menos uma relação de incorporação ou ela deve herdar de uma classe que é o destino de um relacionamento de incorporação.

Em um modelo, cada elemento de modelo é um nó em uma única árvore de incorporar os relacionamentos.A origem e destino de uma relação de incorporação freqüentemente são chamados como pai e filho.

A seleção de um pai para uma classe de domínio depende de como você deseja que o tempo de vida dos seus elementos depende de outros elementos.Se um nó de uma árvore for excluído, sua subárvore geralmente é excluído também.Classes de elemento que têm uma existência independente, portanto, são incorporados diretamente sob a classe de raiz.

Normalmente, se você exibir um elemento dentro de outro elemento, você deseja indicar uma relação de proprietário.Nesse caso, a classe pai mais apropriado é a classe do recipiente.A exceção é quando o item que você vê dentro de um recipiente é na verdade apenas um link de referência para um elemento independente.Nesse caso, a exclusão desse recipiente exclui a referência, mas não seu alvo.

Os padrões de definição de DSL descritas neste tópico, assumiremos que elementos exibidos dentro de um recipiente serão excluídos quando o recipiente é excluído.Esquemas mais complexas são possíveis e podem ser obtidas por meio da definição de regras.

Como o elemento é exibido

Classe pai (incorporação)

Exemplo de modelo de solução DSL

Forma no diagrama.

Raia.

Classe raiz de DSL.

Idioma mínimo.

Fluxo de tarefas: Classe de ator.

A forma de raia.

Classe de elementos que são exibidos como raias do domínio.

Fluxo de tarefas: Classe de tarefa.

Item na lista na forma, onde o item será excluído se o contêiner é excluído.

Porta na borda da forma.

Classe de domínio que é mapeado para a forma do recipiente.

Diagrama de classes: atributo de classe.

Diagrama de componente: classe de porta.

Item na lista, não é excluído se o contêiner é excluído.

Classe raiz de DSL.

A lista exibe links de referência.

Exibido não diretamente.

A classe da qual ela faz parte.

No exemplo a biblioteca de músicas, álbuns são exibidos como retângulos na qual os títulos de músicas são listados.Portanto o pai do álbum é a classe raiz música e o pai de música é o álbum.

Para criar uma classe de domínio e a sua incorporação ao mesmo tempo, clique o Relacionamento de incorporação de ferramenta, em seguida, clique na classe pai e, em seguida, clique em uma parte em branco do diagrama.

Não é geralmente necessário ajustar o nome do relacionamento incorporação e suas funções, porque eles acompanhará automaticamente os nomes de classe.

Para obter mais informações, consulte Propriedades de relações entre domínios e Propriedades das funções de domínio.

ObservaçãoObservação

A incorporação não é igual a herança.Filhos em um relacionamento de incorporação não herdam recursos de seus pais.

Bb126581.collapse_all(pt-br,VS.110).gifAdicionar propriedades de domínio para cada classe de domínio

Propriedades de domínio armazenam valores.Exemplos são: nome, título, data de publicação.

Clique em Propriedades de domínio na classe, pressione a tecla ENTER e, em seguida, digite o nome de uma propriedade.O tipo padrão de uma propriedade de domínio é uma seqüência de caracteres.Se você desejar alterar o tipo, selecione a propriedade de domínio e defina a tipo de na Propriedades janela.Se o tipo que você deseja não estiver na lista suspensa, consulte Adicionando tipos de propriedade.

Defina uma propriedade do nome do elemento. Selecione uma propriedade de domínio que pode ser usada para identificar elementos no Gerenciador de idioma.Por exemplo, na classe de domínio de música que você poderia selecionar a propriedade de domínio do título.No Propriedades janela, defina É o nome do elemento para true.

Bb126581.collapse_all(pt-br,VS.110).gifCriar Classes derivadas de domínio

Se você quiser uma classe de domínio ter variantes que herdam suas propriedades e relacionamentos, crie classes que derivam dele.Por exemplo, o álbum poderá ter gerado classes WMA e MP3.

Criar a classe derivada usando o A classe de domínio ferramenta.

Clique no herança ferramenta, clique na classe derivada e, em seguida, clique a classe base.

Considere a configuração do O modificador de herança da classe base para abstrata.Se você acha que você pode precisar instâncias da classe base, considere em vez disso, criar um separado derivado classe para eles.

Classes derivadas herdam as propriedades e funções de suas classes base.

Bb126581.collapse_all(pt-br,VS.110).gifOrganizar o diagrama de definição de DSL

Quando você adiciona os relacionamentos, algumas de suas classes serão exibido em mais de um só lugar.Para reduzir o número de aparências e tornar o mais largo do diagrama, a classe de destino de um relacionamento com o botão direito e clique em Trazer árvore aqui.Para o efeito oposto, clique com o botão direito na classe de destino de um relacionamento e clique em Divisão árvore.Se você não vir esses comandos de menu, certifique-se de que somente a classe de domínio está selecionada.

Use CTRL + seta para cima e CTRL + seta para baixo para mover a classes de domínio e classes de forma.

Bb126581.collapse_all(pt-br,VS.110).gifAs classes de domínio de teste.

Para testar as novas Classes de domínio

  1. Clique em transformar todos os modelos de na barra de ferramentas do Solution Explorer, para gerar o código do designer de DSL.Você pode automatizar essa etapa.Para obter mais informações, consulte Como automatizar a transformação de todos os modelos.

  2. Compile e execute o DSL. Pressione F5 ou CTRL + F5 para executar uma nova instância do Visual Studio no modo experimental.Na instância experimental do Visual Studio, abrir ou criar um arquivo que tem a extensão de nome de arquivo de seu DSL.

  3. Abra o Explorer. AT o lado do diagrama é a janela Gerenciador de linguagem, que é normalmente denominada YourLanguage Explorer.Se você não vir esta janela, pode estar em uma guia embaixo do Solution Explorer.Se você não pode encontrar, no Exibir , aponte para Other Windowse, em seguida, clique em YourLanguageExplorer.

    O explorer apresenta uma exibição em árvore do modelo.

  4. Crie novos elementos. Clique com o botão direito no nó de raiz na parte superior e, em seguida, clique em Adicionar novoYourClass.

    Uma nova instância da classe é exibida no idioma do Explorer.

  5. Verifique se cada instância tem um nome diferente ao criar novas instâncias.Isso ocorrerá somente se você tiver definido o É o nome do elemento sinalizador em uma propriedade de domínio.

  6. Examine as propriedades do domínio. Com uma instância da classe selecionada, inspecionar a janela Propriedades.Ele deve mostrar as propriedades do domínio que você definiu nesta classe de domínio.

  7. Salve o arquivo, fechá-lo e reabri-la.Todas as instâncias criado devem ser visíveis no explorer, depois que você expande os nós.

A definição de formas no diagrama

Você pode definir classes de elementos que aparecem em um diagrama como retângulos, elipses ou ícones.

Para definir uma classe de elementos que aparecem como formas em um diagrama

  1. Definir e testar uma classe de domínio, conforme descrito em Definindo Classes de domínio**.**

    • O pai da classe deve ser a classe de raiz.Ou seja, deve haver uma relação entre a classe de raiz e a nova classe de domínio de incorporação.

    • Se o diagrama tiver raias, o pai pode ser a classe de domínio que é mapeada para uma raia.Antes de continuar com este procedimento, consulte Definindo uma DSL que tem as raias.

  2. Adicionar uma classe de forma para representar os elementos no diagrama de modelo.Arraste uma das seguintes ferramentas para o diagrama de definição de DSL:

    • Forma de geometria fornece um retângulo ou elipse.

    • Forma de imagem exibe uma imagem que você fornecer.

    • Forma do compartimento é um retângulo que contém uma ou mais listas de itens.

    Renomeie a classe shape, que aparecerá no lado direito do diagrama de definição de DSL, em formas e conectores.

  3. Definir uma imagem, se você tiver criado uma forma de imagem.

    1. Crie um arquivo de imagem de qualquer tamanho.Há suporte para os formatos BMP, JPEG, GIF e EMF.

    2. No Solution Explorer, adicione o arquivo para a solução sob Dsl\Resources.

    3. Retornar para o diagrama de definição de DSL e selecione a nova classe de forma de imagem.

    4. Na janela Properties, clique na imagem propriedade.

    5. No Select Image caixa de diálogo, clique no menu drop-down em nome do arquivoe selecione a imagem.

  4. Adicione decoradores do texto na forma, para exibir as propriedades do domínio.

    Para exibir o nome ou título do elemento de modelo, provavelmente será necessário pelo menos um decorador de texto.

    Clique com o botão direito no cabeçalho da classe shape, aponte para Adde, em seguida, clique em A decorador de texto.Definir o nome do decorador e no conjunto de propriedades de janela seu posição.

  5. Conectar-se a cada forma com um mapa de elemento de diagrama para a classe de domínio que ele deve exibir.

    Clique no Mapa de elemento de diagrama de ferramenta, e em seguida, clique na classe de domínio e clique na classe shape.

  6. Mapear as propriedades para os decoradores de texto.

    1. Selecione a linha cinza entre a classe de domínio e a classe de forma que representa o mapa de elemento de diagrama.

    2. No DSL detalhes janela, clique no Mapas do decorador guia.Se você não vir o DSL detalhes janela diante do View , aponte para Other Windows e, em seguida, clique em DSL detalhes.Freqüentemente, é necessário elevar a parte superior desta janela para ver todo o seu conteúdo.

    3. Selecione o nome do decorador.Em propriedade Display, selecione o nome de uma propriedade da classe de domínio.Repita esse procedimento para cada decorador.

      Se você desejar exibir uma propriedade de um elemento relacionado, clique em navegador de árvore da lista suspensa em o caminho para exibir a propriedade.

    4. Certifique-se de que uma marca de seleção aparece ao lado de cada nome a decorador.

    Janela de detalhes de DSL e mapeamentos de forma

  7. Fazer um item de caixa de ferramentas para a criação de elementos da classe de domínio.

    1. Em Explorer DSL, expanda o Editor nó e todos os seus subnós.

    2. Clique com o botão direito no nó sob Toolbox Tabs que tem o mesmo nome de seu DSL, por exemplo MusicLibrary.Clique em Adicionar elemento ferramenta.

      ObservaçãoObservação

      Se você com o botão direito do Ferramentas nó, você não verá Ferramenta de elemento Add.Em vez disso, clique no nó acima dela.

    3. Na janela Propriedades com a nova ferramenta do elemento selecionada, defina classe para a classe de domínio que você adicionou recentemente.

    4. Definir legenda e Tooltip.

    5. Definir Ícone da caixa de ferramentas a um ícone que aparecerá na caixa de ferramentas.Você pode defini-la para um novo ícone ou um ícone já usado para outra ferramenta.

      Para criar um novo ícone, abra Dsl\Resources em Solution Explorer.Copie e cole um dos arquivos BMP de ferramenta de elemento existentes.Renomeie a cópia colada e, em seguida, clique duas vezes para editá-lo.

      Retornar para o diagrama de definição de DSL, selecione a ferramenta e na janela Properties, clique em [...] na ícone da caixa de ferramentas.No Selecione Bitmap caixa de diálogo, selecione seu.Arquivo BMP no menu drop-down.

Para obter mais informações, consulte Propriedades das formas de geometria e Propriedades das formas de imagem.

Para formas de teste

  1. Clique em transformar todos os modelos de na barra de ferramentas do Solution Explorer, para gerar o código do designer de DSL.

  2. Compile e execute o DSL. Pressione F5 ou CTRL + F5 para executar uma nova instância do Visual Studio no modo experimental.Na instância experimental do Visual Studio, abrir ou criar um arquivo que tem a extensão de nome de arquivo de seu DSL.

  3. Verifique se as ferramentas de elemento aparecem na caixa de ferramentas.

  4. Criar formas arrastando-se de uma ferramenta para o diagrama de modelo.

  5. Verifique se aparece cada decorador de texto, e que:

    1. Você pode editá-lo, a menos que você definiu o É somente leitura do UI sinalizador sobre a propriedade de domínio.

    2. Quando você edita a propriedade na janela Properties ou no decorador, outro modo de exibição é atualizado.

Depois de testar primeiro uma forma, você talvez queira ajustar algumas de suas propriedades e adicione alguns recursos mais avançados.Para obter mais informações, consulte Personalizar e estender uma linguagem específica de domínio.

Definição de relações de referência

Você pode definir uma relação de referência entre qualquer classe de domínio de origem e qualquer classe de domínio de destino.Relações de referência que normalmente são exibidas em um diagrama como conectores, que são linhas entre formas.

Por exemplo, se álbuns de música e artistas são exibidas como formas no seu diagrama, você poderia definir uma relação denominada ArtistsAppearedOnAlbums que vincula os álbuns no qual eles trabalharam artistas.Consulte o exemplo na figura.

Modelo de instância de DSL gerado

Relações de referência também podem vincular a elementos do mesmo tipo.Por exemplo, em uma DSL, que representa uma árvore genealógica, a relação entre pais e seus filhos, é uma relação de referência de pessoa para pessoa.

Bb126581.collapse_all(pt-br,VS.110).gifDefinir uma relação de referência

Clique na ferramenta de relação de referência, e em seguida, clique na classe de domínio de origem do relacionamento e clique na classe de domínio de destino.A classe de destino pode ser o mesmo que a classe de origem.

Cada relação tem duas funções, representadas pela linha em cada lado da caixa de relacionamento.Você pode selecionar cada função e definir suas propriedades na janela Propriedades.

É recomendável renomear as funções.Por exemplo, em uma relação entre a pessoa e pessoa, convém alterar os nomes padrão para pais e filhos, Gerenciador e subordinados, professor e alunos e assim por diante.

Ajustar as multiplicidades de cada função, se for necessário.Se desejar que cada pessoa ter no máximo um gerente, defina a multiplicidade que aparece abaixo do rótulo de gerente no diagrama para 0.

Adicione propriedades de domínio para o relacionamento. Na figura, a relação do álbum do artista tem uma propriedade da função.

Definir oPermite que duplicapropriedade da relação, se mais de um link da mesma classe pode existir entre o mesmo par de elementos de modelo.Por exemplo, você pode permitir que um professor ensinar mais de um sujeito para o aluno a mesmo.

Mapas de forma para conectores

Para obter mais informações, consulte Propriedades de relações entre domínios e Propriedades das funções de domínio.

Bb126581.collapse_all(pt-br,VS.110).gifDefinir um conector para exibir a relação

Um conector exibe uma linha entre duas formas no diagrama de modelo.

Arraste o conector ferramenta para o diagrama de definição de DSL.

Adicione os decoradores de texto se desejar exibir os rótulos no conector.Defina suas posições.Para permitir que o usuário mover um decorador de texto, defina sua É Moveable propriedade.

Use o Mapa de elemento de diagrama de ferramenta para vincular o conector para a relação de referência.

Com o mapa de elemento de diagrama selecionado, abra o DSL detalhes janela e abrir o Mapas do decorador guia.

Selecione cada decorador e defina propriedade Display para a propriedade de domínio correto.

Certifique-se de que uma marca de seleção aparece ao lado de cada item da decoradores lista.

Bb126581.collapse_all(pt-br,VS.110).gifDefinir uma ferramenta construtora de conexão

No Explorer DSL janela, expanda o Editor nó e todos os seus subnós.

Clique com o botão direito no nó que possui o mesmo nome de seu DSL e clique em Adicionar uma nova ferramenta de conexão.

Enquanto a nova ferramenta estiver selecionada, na janela Propriedades:

  • Definir o legenda e Tooltip.

  • Clique em Builder conexão e selecione o construtor apropriado para o novo relacionamento.

  • Definir Ícone da caixa de ferramentas do ícone que você deseja que apareça na caixa de ferramentas.Você pode defini-la para um novo ícone ou um ícone já usado para outra ferramenta.

    Para criar um novo ícone, abra Dsl\Resources em Solution Explorer.Copie e cole um dos arquivos BMP de ferramenta de elemento existentes.Renomeie a cópia colada e, em seguida, clique duas vezes para editá-lo.

    Retornar para o diagrama de definição de DSL, selecione a ferramenta e na janela Properties, clique em [...] na ícone da caixa de ferramentas.No Selecione Bitmap caixa de diálogo, selecione seu.Arquivo BMP no menu drop-down.

Para testar uma relação de referência e um conector

  1. Clique em transformar todos os modelos de na barra de ferramentas do Solution Explorer, para gerar o código do designer de DSL.

  2. Compile e execute o DSL. Pressione F5 ou CTRL + F5 para executar uma nova instância do Visual Studio no modo experimental.Na instância experimental do Visual Studio, abrir ou criar um arquivo que tem a extensão de nome de arquivo de seu DSL.

  3. Verifique se a ferramenta de conexão aparece na caixa de ferramentas.

  4. Criar formas arrastando-se de uma ferramenta para o diagrama de modelo.

  5. Criar conexões entre as formas.Clique na ferramenta Conector, clique em uma forma e, em seguida, clique em outra forma.

  6. Verifique se que você não pode criar conexões entre as classes inadequadas. Por exemplo, se seu relacionamento entre artistas e álbuns, verifique se que não é possível vincular os artistas para artistas.

  7. Se as multiplicidades estão corretas. Por exemplo, verifique se que você não pode conectar uma pessoa com mais de um gerente.

  8. Verifique se aparece cada decorador de texto, e que:

    1. Você pode editá-lo, a menos que você definiu o É somente leitura do UI sinalizador sobre a propriedade de domínio.

    2. Quando você edita a propriedade na janela Properties ou no decorador, outro modo de exibição é atualizado.

Depois de testar primeiro um conector, você talvez queira ajustar algumas de suas propriedades e adicione alguns recursos mais avançados.Para obter mais informações, consulte Personalizar e estender uma linguagem específica de domínio.

A definição de formas que contêm listas: formas de compartimento

Uma forma de compartimento contém um ou mais listas de itens.Por exemplo, em uma DSL de biblioteca de músicas, você poderia usar formas de compartimento para representar os álbuns de música.Em cada álbum, há uma lista de músicas.

Forma do compartimento

O método mais simples de atingir esse efeito em uma definição de DSL, você define uma classe de domínio para o recipiente e uma classe de domínio para cada lista.A classe de contêiner é mapeada para a forma do compartimento.

Mapa de forma

Para obter mais informações, consulte Propriedades das formas de compartimento.

Para definir uma forma de compartimento

  1. Criar a classe de domínio do contêiner.Clique no Relacionamento de incorporação de ferramenta, clique na classe raiz do modelo e, em seguida, clique em uma parte em branco do diagrama de definição de DSL.Isso cria a classe de domínio chamado álbum a figura de exemplo.

    Como alternativa em vez de incorporar na classe raiz, você pode incorporar o recipiente em uma classe de domínio que é mapeada para uma raia.

    Adicione uma propriedade, como nome de domínio para a classe e defina seu É o nome do elemento sinalizador na janela Propriedades.

  2. Criar a classe de domínio do item de lista.Clique no Relacionamento de incorporação de ferramenta, clique na classe de contêiner (álbum) e clique em uma parte em branco do diagrama.Isso cria a classe de domínio chamado música a figura de exemplo.

    Adicione uma propriedade de domínio, como título para a classe e defina seu É o nome do elemento sinalizador.

    Adicione outras propriedades do domínio.

    Adicione outra classe de domínio de item de lista para cada lista que você deseja exibir.

  3. Combinar vários tipos de item na lista, criar classes que herdam da classe list.Tornar a classe list abstrata, definindo sua O modificador de herança.

    Por exemplo, se desejar que a música clássica a ser classificado por compositor em vez de artista, você poderia criar duas subclasses de música, ClassicalSong e NonClassicalSong.

  4. Criar a forma do compartimento.Arraste a partir do Forma do compartimento ferramenta para o diagrama de definição de DSL.

    Adicione um decorador de texto e defina o seu nome.

    Adicione um compartimento e defina o seu nome.

  5. Para permitir que o usuário ocultar os compartimentos de lista, a classe shape do compartimento de atalho, aponte para Adde, em seguida, clique em A decorador de expandir/recolher.Na janela Properties, defina a posição da decorador.

  6. Clique no Mapa de elemento de diagrama de ferramenta, clique na classe de domínio do contêiner e, em seguida, clique na forma de compartimento.

  7. Selecione o link do mapa do elemento de diagrama entre a classe de domínio e a forma.No DSL detalhes janela:

    1. Clique no decoradores guia.Clique no nome do decorador e selecione o item apropriado em Propriedade Display.Certifique-se de que uma marca de seleção aparece ao lado do nome do decorador.

    2. Clique no Mapas de compartimento guia.

      Clique no nome do compartimento.

      Em caminho de coleção de elementos exibidas, vá para a classe de elemento de lista (música).Clique na seta suspensa para usar a ferramenta do navegador.

      Em Propriedade Display, selecione a propriedade que deve ser exibida na lista.No exemplo, este é o título.

ObservaçãoObservação

Usando os campos de caminho no mapa do decorador e mapear campos de compartimento, você pode tornar mais complexos relacionamentos entre as classes de domínio e a forma do compartimento.

Para definir uma ferramenta para criar a forma

  1. Fazer um item de caixa de ferramentas para a criação de elementos da classe de domínio.

  2. Em Explorer DSL, expanda o Editor nó e todos os seus subnós.

  3. Clique com o botão direito no nó sob Toolbox Tabs que tem o mesmo nome de seu DSL, por exemplo MusicLibrary.Clique em Adicionar elemento ferramenta.

    ObservaçãoObservação

    Se você com o botão direito do Ferramentas nó, você não verá Ferramenta de elemento Add.Em vez disso, clique no nó acima dela.

  4. Na janela Propriedades com a nova ferramenta do elemento selecionada, defina classe para a classe de domínio que você adicionou recentemente.

  5. Definir legenda e Tooltip.

  6. Definir Ícone da caixa de ferramentas a um ícone que aparecerá na caixa de ferramentas.Você pode defini-la para um novo ícone ou um ícone já usado para outra ferramenta.

    Para criar um novo ícone, abra Dsl\Resources em Solution Explorer.Copiar e colar uma ou a ferramenta de elemento existente.Arquivos BMP.Renomeie a cópia colada e, em seguida, clique duas vezes para editá-lo.

    Retornar para o diagrama de definição de DSL, selecione a ferramenta e na janela Properties, clique em [...] na ícone da caixa de ferramentas.No Selecione Bitmap caixa de diálogo, selecione seu arquivo BMP no menu drop-down.

Para testar uma forma de compartimento

  1. Clique em transformar todos os modelos de na barra de ferramentas do Solution Explorer, para gerar o código do designer de DSL.

  2. Compile e execute o DSL. Pressione F5 ou CTRL + F5 para executar uma nova instância do Visual Studio no modo experimental.Na instância experimental do Visual Studio, abrir ou criar um arquivo que tem a extensão de nome de arquivo de seu DSL.

  3. Verifique se a ferramenta aparece na caixa de ferramentas.

  4. Arraste a ferramenta para o diagrama de modelo.Uma forma é criada.

    Verifique se o nome do elemento aparece e é definido automaticamente como um valor padrão.

  5. Clique com o botão direito no cabeçalho da nova forma e, em seguida, clique em Adicionar Item de sua lista. No exemplo, o comando é adicionar música.

    Verificar se um item é exibido na lista e se possui um novo nome.

  6. Clique em um dos itens da lista e, em seguida, examine a janela Properties.Você deve ver as propriedades dos itens da lista.

  7. Abra o Explorer do idioma.Verifique se você pode ver os nós de contêiner com os nós de item de lista dentro.

Explorer gerado de DSL

Depois de testar primeiro uma forma do compartimento, você talvez queira ajustar algumas de suas propriedades e adicionar alguns recursos mais avançados.Para obter mais informações, consulte Personalizar e estender uma linguagem específica de domínio.

Normalmente, um elemento que você exibir em um compartimento é um filho do elemento que é representado pela forma compartimento.Mas, às vezes, você gostaria de exibir um elemento que esteja vinculado a ele com uma relação de referência.

Por exemplo, poderíamos adicionar um segundo compartimento para AlbumShape que exibe uma lista dos artistas que estão vinculados ao álbum.

Nesse caso, o compartimento deve exibir o link, em vez do elemento referenciado.Isso ocorre porque quando o usuário seleciona o item no compartimento e pressiona DELETE, você deseja que o link a ser excluído, não o elemento referenciado.

No entanto, você pode ter o nome do elemento referenciado aparecem no compartimento.

O procedimento a seguir pressupõe que você já tenha criado a classe de domínio, a relação de referência, a forma do compartimento e o mapa de elemento de diagrama, conforme descrito anteriormente nesta seção.

  1. Adicionar um compartimento à forma do compartimento.No diagrama de definição de DSL, a classe shape do compartimento de atalho, aponte para Adde, em seguida, clique em compartimento.

  2. Definir caminho de coleção de elementos exibidas para navegar até o link, em vez de seu elemento de destino.Clique no menu drop-down e use o modo de exibição de árvore para selecionar a relação de referência em vez de seu destino.No exemplo, a relação é ArtistAppearedOnAlbums.

  3. Definir caminho para a propriedade de vídeo para navegar no link para o elemento de destino.No exemplo, este é o artista.

  4. Definir Propriedade Display à propriedade apropriada do elemento de destino, por exemplo nome.

  5. Transformar todos os modelos de, construir e executa o DSL e abrir um modelo de teste.

  6. No diagrama de modelo, criar as classes apropriadas de forma, defina seus nomes e criar um vínculo entre elas.Na forma compartimento, os nomes dos elementos vinculados devem aparecer.

  7. Selecione o link ou o item na forma de compartimento.O link e o item devem desaparecer.

Definir portas no limite de outra forma

Uma porta é uma forma que está localizada no limite de outra forma.

Portas também podem ser usadas para fornecer um ponto de conexão fixo em uma outra forma, ao qual o usuário possa desenhar conectores.Nesse caso, você pode tornar a forma de porta transparente.

Para ver um exemplo que usa portas, selecione o Diagrama de componente modelo quando você cria uma nova solução DSL.Este exemplo mostra os principais pontos que você pode considerar ao definir portas:

  • Há uma classe de domínio que representa o recipiente das portas, Component.

  • Há uma classe de domínio que representa as portas.No exemplo, isso é ComponentPort.

  • Há uma relação de incorporação da classe de contêiner de domínio para a classe de domínio de porta.Para obter mais informações, consulte Definindo Classes de domínio.

  • Se desejar que os diferentes tipos de porta para ser misturados no mesmo recipiente, você pode criar subclasses da classe de domínio de porta.No exemplo, InPort e OutPort herdar de ComponentPort.

  • Classe de contêiner de domínio pode ser mapeado para qualquer tipo de forma.No exemplo, é ComponentShape.Para obter mais informações, consulte Definindo formas.

  • As classes de domínio de porta são mapeadas para as formas de porta.Você pode mapear as classes derivadas para separar as classes de forma de porta ou mapear a classe base para a classe shape de uma porta.

Em outros aspectos, as formas de porta se comportam conforme descrito em Definindo formas.

Para obter mais informações, consulte Propriedades das formas de porta.

Definindo uma DSL que tenha as raias

As raias são uma partição vertical ou horizontal de um diagrama.Cada raia corresponde a um elemento de modelo.Sua definição de DSL requer uma classe de domínio para os elementos de raia.

A melhor maneira de criar uma DSL com raias é criar uma nova solução DSL e escolha o modelo de fluxo de tarefas de solução.Na definição de DSL, a classe de ator é a classe de domínio mapeada para a raia.Renomear esta e outras classes de acordo com seu projeto.

Para adicionar uma classe que será exibida como uma forma dentro de uma raia, crie um relacionamento de incorporação entre a classe de raia e sua nova classe.Os usuários poderão arrastar elementos de uma raia para outro, mas sempre será cada elemento dentro de uma determinada raia.No modelo de solução de fluxo de tarefas, o FlowElement é um filho da classe raia.

Para adicionar uma classe que será exibida como uma forma independentemente das raias, crie um relacionamento de incorporação entre a classe de raiz e sua nova classe.Os usuários poderão colocar essas formas em qualquer lugar no diagrama, incluindo os limites de raias e fora raias.No modelo de solução de fluxo de tarefas, o comentário é um filho da classe raiz.

Para obter mais informações, consulte Propriedades de raias.

Adicionando tipos de propriedade

Bb126581.collapse_all(pt-br,VS.110).gifLiterais e enumerações de domínio

Uma enumeração de domínio é um tipo com vários valores literais.

Para adicionar uma enumeração de domínio, clique com o botão direito na raiz do modelo no Explorer DSL e, em seguida, clique em Adicionar uma nova enumeração de domínio.O elemento aparecerá na Explorer DSL sob o Tipos de domínio nó.Este elemento não aparece no diagrama.

Para adicionar os literais de enumeração para a enumeração de domínio, clique com o botão direito a enumeração de domínio na Explorer DSL e, em seguida, clique em Adicionar nova enumeração Literal.

Por padrão, uma propriedade que possui um tipo de enumeração pode ser definida para apenas um valor da enumeração ao mesmo tempo.Se desejar que os usuários e programadores para poder definir qualquer combinação de valores - um "campo de bit-" definir o IsFlags propriedade da enumeração.

Bb126581.collapse_all(pt-br,VS.110).gifTipos externos

Quando você define o tipo de uma propriedade de domínio, se você não encontrar o tipo desejado na tipo de na lista suspensa, você pode adicionar um tipo externo.Por exemplo, você pode adicionar o System.Drawing.Color à lista.

Para adicionar um tipo, a raiz do modelo no Explorer DSL com o botão direito e, em seguida, clique em Adicionar novo tipo externo.Na janela Properties, defina o nome como Color e o namespace para System.Drawing.Esse tipo agora aparece no Explorer DSL em Tipos de domínio.Você pode escolhê-lo sempre que você definir o tipo de uma propriedade de domínio.

Personalizando a DSL

Usando as técnicas descritas neste tópico, 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.

Há dois métodos de estender a definição de DSL:

  1. Ajuste o DSL usando mais recursos da definição de DSL.Por exemplo, você pode tornar uma ferramenta de conector único que pode criar vários tipos de conector, e você pode controlar as regras, quais excluindo um elemento também exclui elementos relacionados.Essas técnicas são atingidas principalmente definindo valores na definição de DSL e alguns requerem algumas linhas de código de programa.

    Para obter mais informações, consulte Personalizar e estender uma linguagem específica de domínio.

  2. Estenda suas ferramentas de modelagem, usando o código de programa para obter efeitos mais avançados.Por exemplo, você pode criar comandos de menu que podem alterar o modelo, e você pode criar ferramentas que integram as DSLs dois ou mais.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 Escrever código para personalizar uma linguagem específica de domínio.

Bb126581.collapse_all(pt-br,VS.110).gifAlterando a definição de DSL

Quando você cria qualquer item em uma definição de DSL, muitos valores padrão são definidos automaticamente.Depois de ter sido definidas, você pode alterá-las.Isso simplifica o desenvolvimento de uma DSL, embora ainda permitindo para personalizações poderosas.

Por exemplo, quando você mapeia uma forma a um elemento, o caminho do elemento pai do mapeamento é automaticamente definido conforme o relacionamento de incorporação da classe de domínio.No entanto, se você alterar posteriormente o relacionamento de incorporação, o caminho do elemento pai não é alterado automaticamente.

Você deve, portanto, estar ciente de que quando você altera alguns relacionamentos em sua definição de DSL, não é incomum que erros sejam relatados quando você salva a definição ou quando você transforma todos os modelos.A maioria desses erros é fáceis de corrigir.Clique duas vezes no relatório de erros para ver o local do erro.

See also Como: alterar o Namespace de um idioma específico do domínio.

Solução de problemas

A tabela a seguir lista alguns dos problemas mais comuns encontrados quando você cria uma DSL, juntamente com sugestões para sua solução.Conselhos estão disponível na Extensibililty Fórum das ferramentas de visualização.

Problema

Sugestão

As alterações que fiz no arquivo de definição de DSL terão efeito.

Clique em Transformar todos os modelos de na barra de ferramentas acima Solution Explorer e, em seguida, recriar a solução.

As formas mostram o nome do decorador em vez do valor da propriedade.

Configure o mapeamento a decorador.No diagrama de definição de DSL, clique em mapa de elemento de diagrama, o que é a linha cinza entre a classe de domínio e a classe shape.

Abrir o DSL detalhes janela.Se você não pode vê-lo, no menu Exibir, aponte para Other Windowse, em seguida, clique em DSL detalhes.

Clique no Mapas do decorador guia.Selecione o nome do decorador.Certifique-se de que a caixa ao lado dele é verificada.Em propriedade Display, selecione o nome de uma propriedade de domínio.

Para obter mais informações, consulte as formas no diagrama de.

No Explorer DSL, não posso adicionar a uma coleção.Por exemplo, quando eu com o botão direito ferramentas, não há nenhum comando "Adicionar Tool" no menu.

No explorer para meu DSL, não consigo adicionar um elemento a uma lista.

Clique com o botão direito no item acima o nó que você está tentando.Quando você deseja adicionar a uma lista, o comando Add é não o nó da lista, mas em seu proprietário.

Criei uma classe de domínio, mas não consigo criar instâncias no Gerenciador de idioma.

Cada classe de domínio, exceto a raiz deve ser o destino de uma relação de incorporação.

No explorer para meu DSL, os elementos são mostrados apenas com seus nomes de tipos.

Na definição de DSL, selecione uma propriedade da classe de domínio e nas propriedades da janela, defina É o nome do elemento como true.

Meu DSL é sempre aberto no editor XML.

Isso pode acontecer por causa de um erro enquanto o arquivo estava sendo lida.No entanto, mesmo depois de corrigir esse erro, você deve redefinir explicitamente o editor para ser seu designer DSL.

Clique com o botão direito no item de projeto, clique em Abrir com e selecione YourLanguageDesigner (padrão).

A caixa de ferramentas de meu DSL não aparece depois de alterado os nomes de assembly.

Inspecione e atualizar DslPackage\GeneratedCode\Package.tt para obter mais informações, consulte Como: alterar o Namespace de um idioma específico do domínio.

A caixa de ferramentas de meu DSL não aparece, mas não mudaram o nome do assembly.

Ou então, será exibida uma caixa de mensagem relatando a falha ao carregar uma extensão.

Redefinir a instância experimental e reconstruir a sua solução.

  1. No Windows menu Iniciar, em Todos os programas, expanda SDK do Visual Studio, em seguida, Ferramentase, em seguida, clique em Redefinir a instância do Experimental Microsoft Visual Studio.

  2. Sobre o Visual StudioBuild menu, clique em Rebuild Solution.

Consulte também

Tarefas

A criação de um idioma do Windows baseada em formulários específicos do domínio

Conceitos

Introdução ao linguagens específicas de domínio

A criação de uma linguagem de domínio específico baseado no WPF