Compartilhar via


Relacionamentos, Classes e Noções básicas sobre modelos

Uma linguagem específica de domínio (DSL) é definida por seu arquivo de definição de DSL, juntamente com qualquer código de programa personalizado que você pode escrever.A maioria do código do programa na solução DSL é gerada a partir deste arquivo.

Este tópico explica os recursos central da definição de DSL.

A definição de DSL

Quando você abre Dsl\DslDefinition.dsl, sua Visual Studio janela semelhante a figura a seguir.

designer DSL

As informações mais importantes na definição de DSL são exibidas no diagrama de definição de DSL.Informações adicionais, que também é parte do DslDefinition.dsl, são exibidas no Explorer de DSL, que geralmente aparece no lado do diagrama.Você trabalha com o diagrama para as tarefas mais freqüentes e com o Explorer DSL para personalizações mais avançadas.

O diagrama de definição de DSL mostra as classes de domínio que definem os elementos de modelo e as relações que definem os vínculos entre elementos de modelo.Ele também mostra as formas e conectores que são usados para exibir os elementos de modelo para o usuário.

designer DSL com Raia

Quando você seleciona um item na definição de DSL, no diagrama ou no Explorer DSL, informações sobre ele são exibidas na janela Propriedades.Informações adicionais podem ser exibidas na janela de detalhes de DSL.

Bb126288.collapse_all(pt-br,VS.110).gifModelos são instâncias de DSLs

A modelo é uma instância de seu DSL criada por um usuário.Um modelo contém elementos de modelo, que são instâncias de classes de domínio que você define e vínculos entre os elementos, que são instâncias das relações de domínio que você define.Um modelo também pode ter formas e conectores, que exibem os elementos de modelo e os links em um diagrama.A definição de DSL inclui as classes de forma, classes de conector e uma classe para o diagrama.

Uma definição de DSL é também conhecido como um modelo de domínio.Um modelo de definição de DSL ou de domínio é a representação de tempo de design de linguagem específica de domínio, enquanto o modelo é a instanciação em tempo de execução da linguagem específica de domínio.

Classes de domínio definem os elementos de modelo

Classes de domínio são usadas para criar os vários elementos no domínio e relações de domínios são os links entre os elementos.Eles são a representação de tempo de design dos elementos e links que será instanciado pelos usuários da linguagem específica do design ao criarem seus modelos.

Esta ilustração mostra um modelo que tenha sido criado pelo usuário de uma biblioteca de música DSL.Álbuns de música são representadas por caixas que contêm listas de músicas.Artistas são representadas por caixas com cantos arredondados e estão conectadas aos álbuns para o qual eles contribuíram.

Modelo de instância de DSL gerado

A definição de DSL separa os dois aspectos.A aparência dos elementos de modelo no diagrama de modelo é definida usando classes de forma e classes do conector.A informação transferida no modelo é definida usando classes de domínio e relacionamentos de domínio.

A ilustração a seguir mostra as classes de domínio e as relações na definição de DSL da biblioteca de músicas.

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

A ilustração mostra quatro classes de domínio: música, álbum, artista e música.As classes de domínio definem propriedades de domínio, como nome, título e assim por diante.No modelo de instância, os valores de algumas dessas propriedades são exibidos no diagrama.

Entre as classes são relações de domínios: MusicHasAlbums, MusicHasArtists, AlbumbHasSongs e ArtistAppearedOnAlbums.As relações têm multiplicidades como, por exemplo, 1, 0.. 1... *.Por exemplo, todas as músicas devem estar relacionadas ao álbum exatamente um por meio do relacionamento AlbumHasSongs.Os álbuns podem ter qualquer número de músicas.

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

Observe que uma classe de domínio pode aparecer várias vezes no diagrama de definição de DSL, como o álbum nesta figura.Sempre há um modo de exibição principal, e pode haver alguns referência modos de exibição.

Para reorganizar o diagrama de definição de DSL, você pode:

  • Troque o principal e modos de exibição de referência usando o Trazer árvore aqui e Divisão árvore comandos.Uma classe de domínio único para ver esses comandos de atalho.

  • Reordene as classes de domínio e as classes de forma pressionando Ctrl + seta para cima e Ctrl + seta para baixo.

  • Recolher ou expandir usando o ícone no canto superior direito de cada forma de classes.

  • Recolher partes da árvore clicando no sinal de subtração (-) na parte inferior de uma classe de domínio.

Herança

Classes de domínio podem ser definidos usando a herança.Para criar uma derivação de herança, clique na ferramenta de herança, clique na classe derivada e, em seguida, clique na classe de base.Um elemento de modelo tem todas as propriedades definidas na sua própria classe de domínio, juntamente com todas as propriedades herdadas da classe base.Ele também herda as suas funções em relacionamentos.

Herança também pode ser usada entre relações, formas e conectores.Herança deve manter dentro do mesmo grupo.Uma forma não pode herdar de uma classe de domínio.

Relações de domínios

Elementos de modelo podem ser vinculados por relações.Links sempre são binários; eles vincular exatamente dois elementos.No entanto, qualquer elemento pode ter vários links para outros objetos, e pode até mesmo haver mais de um vínculo entre o mesmo par de elementos.

Assim como você pode definir diferentes classes de elementos, você pode definir classes diferentes de links.A classe de um link é chamada uma relação de domínio.Uma relação de domínio especifica quais classes de elemento suas instâncias podem se conectar.Cada extremidade de um relacionamento é chamada um função, e a relação de domínio define os nomes para as duas funções, bem como para o próprio relacionamento.

Há dois tipos de relações entre domínios: a incorporação de relacionamentos e relacionamentos de referência.No diagrama de definição de DSL, relações de incorporação têm linhas sólidas em cada função e relações de referência tem tracejadas.

Bb126288.collapse_all(pt-br,VS.110).gifA incorporação de relações

Cada elemento em um modelo, exceto para a sua raiz, é o destino de um link de incorporação.Portanto, todo o modelo forma uma única árvore de incorporar links.Um relacionamento de incorporação representa o confinamento ou propriedade.Dois elementos de modelo que estão relacionados dessa forma também são conhecidos como pai e filho.O filho é considerado para ser incorporado no pai.

Incorporação de links não são normalmente exibidas explicitamente como conectores em um diagrama.Em vez disso, eles geralmente são representados por confinamento.A raiz do modelo é representada pelo diagrama e elementos incorporados são exibidos como formas no diagrama.

No exemplo, a classe raiz música tem um relacionamento de incorporação MusicHasAlbums ao álbum, que tem um AlbumHasSongs de incorporação música.Músicas são exibidas como itens em uma lista dentro de cada álbum.Música também tem um MusicHasArtists de incorporação para a classe de artista, cujas instâncias também aparecem como formas no diagrama.

Por padrão, os elementos incorporados são automaticamente excluídos quando seus pais são excluídos.

Quando um modelo é salvo no arquivo em formato XML, elementos incorporados são aninhados dentro de seus pais, a menos que você personalizou a serialização.

ObservaçãoObservação

A incorporação não é igual a herança.Filhos em um relacionamento de incorporação não herdam propriedades do pai.Incorporação de um é um tipo de vínculo entre elementos de modelo.Herança é uma relação entre classes e não cria vínculos entre elementos de modelo.

Bb126288.collapse_all(pt-br,VS.110).gifA incorporação de regras

Cada elemento em um modelo de instância deve ser o destino de exatamente um link de incorporação, exceto para a raiz do modelo.

Portanto, todas as classes de domínio non-abstract, exceto a classe de raiz, devem ser o destino de pelo menos uma relação de incorporação ou ela deve herdar uma incorporação de uma classe base.Uma classe pode ser o destino de dois ou mais objetos incorporados, mas seus elementos de modelo de instância só podem ter um pai ao mesmo tempo.A multiplicidade de destino, a fonte deve ser 0 ou 1.. 1.

Bb126288.collapse_all(pt-br,VS.110).gifO Explorer exibe a árvore de incorporação

A definição de DSL também cria um explorer, o que os usuários vêem juntamente com o seu diagrama de modelo.

Explorer gerado de DSL

O explorer mostra todos os elementos do modelo, mesmo aqueles para os quais você não tiver definido todas as formas.Ele mostra elementos e relações de incorporação, mas não relações de referência.

Para ver os valores das propriedades de domínio de um elemento, o usuário seleciona um elemento, no diagrama de modelo ou no Gerenciador de modelos e abre a janela de propriedades.Ele exibe todas as propriedades de domínio, incluindo aqueles que não são exibidas no diagrama.No exemplo, cada música tem um título e um gênero, mas somente o valor do título é mostrado no diagrama.

Relações de referência

Uma relação de referência representa qualquer tipo de relacionamento não é a incorporação.

Relações de referência que normalmente são exibidas em um diagrama como conectores entre formas.

Na representação XML do modelo, um link de referência entre dois elementos é representado usando identificadores de origem. Ou seja, os identificadores são nomes que identificam exclusivamente cada elemento no modelo.O nó XML para cada elemento de modelo contém um nó que especifica o nome do relacionamento e o moniker do outro elemento.

Funções

Cada relação de domínio tem duas funções, uma função de origem e uma função de destino.

Na figura a seguir, a linha entre a classe de domínio do Publisher e a relação de domínio PublisherCatalog é a função de origem.A linha entre a relação de domínio e a classe de domínio do álbum é a função de destino.

As funções e propriedades.

Os nomes associados a uma relação são especialmente importantes quando você escreve o código de programa que atravessa o modelo.Por exemplo, quando você constrói a solução DSL, o Publisher classe gerada tem uma propriedade catálogo é uma coleção de álbuns.A classe álbum tem uma propriedade Publisher é uma única instância da classe Publisher.

Quando você cria uma relação em uma definição de DSL, os nomes de propriedade e o relacionamento recebem valores padrão.No entanto, você pode alterá-los.

Multiplicidades

Multiplicidades especificar quantos elementos pode ter a mesma função em uma relação de domínio.No exemplo, o zero-para-muitos (0... *) configuração de multiplicidade da função de catálogo Especifica que todas as instâncias da classe de domínio a Publisher podem ter quantos links de relacionamento de PublisherCatalog que você deseja dar a ela.

Configurar a multiplicidade de uma função digitando no diagrama ou modificando o Multiplicity propriedade no Propriedades janela.A tabela a seguir descreve as configurações para essa propriedade.

Tipo de multiplicidade

Descrição

0... * (Zero para muitos)

Cada instância da classe de domínio pode ter várias instâncias do relacionamento ou nenhuma instância do relacionamento.

0 (Zero a um)

Cada instância da classe de domínio pode ter no máximo uma instância do relacionamento ou nenhuma instância do relacionamento.

1.. 1 (Um)

Cada instância da classe de domínio pode ter uma instância do relacionamento.Você não pode criar mais de uma instância da relação de qualquer instância da classe de função.Se a validação estiver ativada, um erro de validação será exibido quando qualquer instância da classe função não tem nenhuma instância do relacionamento.

1... * (Um para muitos)

Cada instância da classe na função que tenha essa multiplicidade pode ter várias instâncias do relacionamento e cada uma deve ter pelo menos uma instância do relacionamento.Se a validação estiver ativada, um erro de validação será exibido quando qualquer instância da classe função não tem nenhuma instância do relacionamento.

Relações de domínios como Classes

Um link é representado no armazenamento como uma instância de LinkElement, que é uma classe derivada de ModelElement.Você pode definir essas propriedades no diagrama de modelo de domínio na relação de domínio.

Você também pode fazer uma relação na origem ou destino de outros relacionamentos.No diagrama de modelo de domínio, o botão direito do mouse a relação de domínio e clique em Mostrar como a classe.Aparecerá uma caixa de classe adicional.Em seguida, você pode conectar relações a ela.

Você pode definir uma relação parcialmente pela herança, exatamente como faria com as classes de domínio.Selecione a relação derivada e defina Da Base de relacionamento na janela Propriedades.

Uma relação derivada é especializada em sua relação de base.O domínio de classes que ele links deve ser derivado de ou igual as classes vinculadas pela relação de base.Quando é criado um link da relação derivada em um modelo, é uma instância da derivada e relações base.No código de programa, você pode navegar para a extremidade oposta do link usando as propriedades geradas com a base ou pela classe derivada.

Consulte também

Conceitos

[redirecionar] Relações de domínios na API gerado

Outros recursos

Domain-Specific Language Tools Glossary