Partager via


Présentation des modèles, des classes et des relations

Un langage spécifique au domaine est défini (DSL) par son fichier de définition DÉSOLÉ, ainsi que tout code du programme personnalisé que vous pouvez écrire. La majeure partie du code de programme dans la solution DÉSOLÉ est générée à partir de ce fichier.

Cette rubrique explique les fonctionnalités centrales de la définition de langage spécifique à un domaine.

La définition DÉSOLÉ

Lorsque vous ouvrez Dsl\DslDefinition.dsl, votre fenêtre de Visual Studio ressemble à l'image suivante.

concepteur dsl

Les informations les plus importantes dans la définition DÉSOLÉ sont affichées dans le diagramme de définition de langage spécifique à un domaine. Des informations supplémentaires, qui font également partie de DslDefinition.dsl, sont affichées dans l'explorateur DÉSOLÉ, qui apparaît généralement sur le côté du diagramme. Vous utilisez le diagramme pour les tâches les plus fréquentes, et avec l'explorateur DÉSOLÉ pour les personnalisations plus avancées.

Le diagramme de définition DÉSOLÉ montre les classes de domaine qui définissent des éléments de modèle, et les relations qui définissent des liens entre des éléments de modèle. elle montre également les formes et les connecteurs qui sont utilisés pour afficher les éléments de modèle à l'utilisateur.

concepteur dsl avec couloir

Lorsque vous sélectionnez un élément dans la définition DÉSOLÉ, sur le diagramme ou dans l'explorateur DÉSOLÉ, des informations connexes sont affichées dans la fenêtre Propriétés. Des informations supplémentaires peuvent s'afficher dans la fenêtre de détails DÉSOLÉ.

Les modèles sont des instances de langages spécifiques à un domaine

Un modèle est une instance de votre DÉSOLÉ créé par un utilisateur. Un modèle contient des éléments de modèle, qui sont des instances de classes de domaine que vous définissez, et des liens entre des éléments, qui sont des instances des relations de domaine que vous définissez. un modèle peut également avoir des formes et des connecteurs, qui affichent les éléments de modèle et les liens sur un diagramme. La définition DÉSOLÉ inclut les classes de forme, les classes de connecteur, et une classe pour le diagramme.

Une définition de langage DÉSOLÉ est également appelé modèle de domaine. Un modèle de définition ou de domaine DÉSOLÉ est la représentation au moment de le design du langage spécifique au domaine, alors que le modèle est l'instanciation à l'exécution du langage spécifique au domaine.

les classes de domaine définissent des éléments de modèle

Les classes de domaine sont utilisées pour créer des éléments individuels dans le champ, et les relations de domaine sont les liens entre les éléments. Ils sont la représentation au moment de le design des éléments et des liens qui sont instanciés par les utilisateurs du langage de création-détail lorsqu'ils créent leurs modèles.

Cette illustration affiche un modèle créé par l'utilisateur une médiathèque DÉSOLÉ. des albums de musique sont représentés par les zones qui contiennent des listes de chansons. Les artistes sont représentés par les zones rond-acculées, et sont connectés à des albums auxquels ils ont contribué.

Modèle d'instance du DSL généré

La définition DÉSOLÉ sépare deux aspects. L'apparence des éléments de modèle sur le diagramme de modèle est définie à l'aide de les classes de forme et des classes de connecteur. Des informations ont porté par le modèle sont définies à l'aide de classes de domaine et des relations de domaine.

L'illustration suivante montre les classes et les relations de domaine dans la définition DÉSOLÉ de la médiathèque.

Relations d'incorporation et de référence

l'illustration montre quatre classes de domaine : musique, album, artiste et chanson. Les classes de domaine définir les propriétés de domaine telles que le nom, le titre, et ainsi de suite. Dans le modèle d'instance, les valeurs de certaines de ces propriétés sont affichées dans le diagramme.

Entre les classes sont les relations des domaines : MusicHasAlbums, MusicHasArtists, AlbumbHasSongs, et ArtistAppearedOnAlbums. Les relations ont des multiplicités telles que 1..1, 0. *. Par exemple, chaque chanson doit être liée à exactement un album via la relation d'AlbumHasSongs. Chaque album peut avoir un nombre quelconque de chansons.

Réorganiser le diagramme de définition DÉSOLÉ

Notez qu'une classe de domaine peut apparaître plusieurs fois sur le diagramme de définition DÉSOLÉ, comme l'album fait dans cette image. Il existe encore une vue principale, et il peut y avoir des vues de référence .

Pour réorganiser le diagramme de définition DÉSOLÉ, vous pouvez :

  • Permute le principal et référencez les vues à l'aide de les commandes d' apportez l'arborescence ici et de fractionnez l'arborescence . Cliquez avec le bouton droit sur une même classe de domaine pour afficher ces commandes.

  • Retriez les classes de domaine et les classes de forme en appuyant sur Ctrl+Up et Ctrl+Down.

  • Réduire ou développer des classes à l'aide de l'icône au haut à droite de chaque forme.

  • Réduction des parties de l'arborescence en cliquant sur le signe moins (-) en bas d'une classe de domaine.

Héritage

Les classes de domaine peuvent être définies à l'aide de l'héritage. Pour créer une dérivation d'héritage, cliquez sur l'outil d'héritage, cliquez sur la classe dérivée, puis cliquez sur la classe de base. Un élément de modèle a toutes les propriétés définies sur sa propre classe de domaine, avec toutes les propriétés héritées de la classe de base. Il hérite ses rôles dans les relations.

l'héritage peut également être utilisé entre les relations, les formes, et les connecteurs. L'héritage doit conserver dans le même groupe. une forme ne peut pas hériter d'une classe de domaine.

relations de domaine

Les éléments de modèle peuvent être liés par des relations. Les liens sont toujours binaire ; ils lient exactement deux éléments. Toutefois, tout élément peut avoir de nombreuses liens vers d'autres objets, et peut même contenir plusieurs liens entre les mêmes paires d'éléments.

De même que vous pouvez définir différentes classes d'éléments, vous pouvez définir différentes classes des liens. la classe d'un lien est appelée une relation de domaine. Relation de domaine spécifie les classes d'élément ses instances des modifications. Chaque fin d'une relation correspond à un rôle, et la relation de domaine définit les noms des deux rôles, ainsi que pour la relation elle-même.

Il existe deux genres de relations de domaine : relations d'incorporation et relations de référence. Sur le diagramme de définition DÉSOLÉ, incorporant des relations ont des traits pleins à chaque rôle, et les relations de référence possèdent des lignes en pointillés.

relations d'incorporation

Chaque élément de modèle, à l'exception de sa racine, est la cible d'un lien incorporant. Par conséquent, les formulaires de modèle entier d'une arborescence unique de l'incorporation des liens. Une relation d'incorporation représente la relation contenant-contenu ou la propriété. Deux éléments de modèle qui sont liés de cette façon sont également appelé le parent et l'enfant. L'enfant est appelé incorporé dans le parent.

Incorporant des liens n'est généralement pas affichés explicitement comme connecteurs sur un diagramme. À la place, ils sont généralement représentés par les relations contenant-contenu. La racine du modèle est représentée par le diagramme, et des éléments incorporés dans celui-ci sont affichés comme des formes sur le diagramme.

Dans l'exemple, la musique de classe racine a une relation MusicHasAlbums d'incorporer à l'album, qui a un AlbumHasSongs incorporant à la chanson. Les chansons sont affichées comme éléments dans une liste à l'intérieur de chaque album. La musique a également un MusicHasArtists incorporant à la classe d'artiste, dont les instances s'affichent également comme formes sur le diagramme.

Par défaut, les éléments incorporés sont automatiquement supprimés lorsque leurs parents sont supprimés.

Lorsqu'un modèle est enregistré dans le fichier dans un format XML, les éléments incorporés sont imbriqués à l'intérieur de leurs parents, à moins que vous avez personnalisé la sérialisation.

Notes

L'incorporation n'est pas les mêmes que l'héritage.Les enfants dans une relation d'incorporation n'héritent pas les propriétés du parent.Une incorporation est un type de lien entre des éléments de modèle.L'héritage est une relation entre les classes, et ne crée pas de liens entre des éléments de modèle.

règles d'incorporation

Chaque élément dans un modèle d'instance doit être la cible de exactement un lien incorporant, à l'exception de la racine du modèle.

Par conséquent, chaque classe non abstraite de domaine, à moins que la classe racine, doit être la cible d'au moins une relation incorporante, ou il doit hériter une incorporation d'une classe de base. Une classe peut être la cible de deux incorporations ou plus, mais ses éléments de modèle d'instance peuvent avoir qu'un seul parent à la fois. La multiplicité de la cible à la source doit être 0..1 ou 1..1.

l'explorateur affiche l'arborescence d'incorporation

La définition de votre DÉSOLÉ crée également un explorateur, que les utilisateurs voient en regard de leur diagramme de modèle.

Explorateur généré de DSL

L'explorateur affiche tous les éléments dans le modèle, même ceux dont vous n'avez défini aucune forme. Elle affiche des éléments et des relations d'incorporation, mais pas de relations de référence.

Pour que les valeurs des propriétés de champ d'un élément, l'utilisateur sélectionne un élément, dans le diagramme de modèle ou dans l'explorateur de modèles, et ouvre la fenêtre Propriétés. il affiche toutes les propriétés de domaine, y compris ceux qui ne sont pas affichés sur le diagramme. Dans l'exemple, chaque chanson a un titre et un type, mais seule la valeur du titre est indiquée sur le diagramme.

relations de référence

Une relation de référence représente tout type de relation qui n'incorpore pas.

Les relations de référence sont généralement affichées sur un diagramme comme connecteurs entre les formes.

Dans la représentation XML du modèle, un lien de référence entre deux éléments est représenté à l'aide de les monikers. Autrement dit, les monikers sont des noms qui identifient de façon unique chaque élément dans le modèle. Le nœud XML pour chaque élément de modèle contient un nœud qui spécifie le nom de la relation et le moniker de l'autre élément.

Rôles

Chaque relation de domaine possède deux rôles, un rôle de source et un rôle cible.

Dans l'image suivante, la ligne entre la classe de domaine de l'éditeur et la relation de domaine de PublisherCatalog est le rôle de source. La ligne entre la relation de domaine et la classe de domaine de l'album est le rôle cible.

Rôles et propriétés.

Les noms associés à une relation sont particulièrement important lorsque vous écrivez du code de programme qui parcourt le modèle. Par exemple, lorsque vous générez la solution DÉSOLÉ, l'éditeur généré de classe a un catalogue de propriété qui est une collection d'albums. L'album de classe a un éditeur de propriété qui est une instance unique de l'éditeur de classe.

Lorsque vous créez une relation dans une définition DÉSOLÉ, les noms de propriété et de relations reçoivent des valeurs par défaut. Toutefois, vous pouvez les modifier.

Multiplicités

Les multiplicités spécifient le nombre d'éléments peuvent avoir le même rôle d'une relation de domaine. dans l'exemple, les zéro-à-beaucoup (0. *) le paramètre de multiplicité sur le rôle de catalogue spécifie que toute instance de la classe de domaine de l'éditeur peut posséder autant de liens de relation de PublisherCatalog que vous souhaitez donner la.

Configurez la multiplicité d'un rôle en tapant sur le diagramme ou en modifiant la propriété d' Multiplicity dans la fenêtre de Propriétés . le tableau suivant décrit les paramètres pour cette propriété.

La multiplicité type

Description

0. * (Zéro ou plusieurs)

Chaque instance de la classe de domaine peut avoir plusieurs instances de la relation ou de toutes instances de la relation.

0..1 (zéro à un)

Chaque instance de la classe de domaine ne peut avoir qu'une seule instance de la relation ou de toutes instances de la relation.

1..1 (un)

chaque instance de la classe de domaine peut avoir une instance de la relation. Vous ne pouvez pas créer plusieurs instances de cette relation d'aucune instance du rôle de classe. Si la validation est activée, une erreur de validation s'affiche lorsque toute instance du rôle de classe n'a aucune instance de la relation.

1. * (un à plusieurs)

Chaque instance de la classe sur le rôle qui possède cette multiplicité peut avoir plusieurs instances de la relation, et chaque instance doit avoir au moins une instance de la relation. Si la validation est activée, une erreur de validation s'affiche lorsque toute instance du rôle de classe n'a aucune instance de la relation.

Relations de domaine comme des classes

Un lien est représenté dans le magasin en tant qu'instance de LinkElement, qui est une classe dérivée de ModelElement. Vous pouvez définir ces propriétés dans le diagramme de modèle de domaine sur les relations de domaine.

Vous pouvez également effectuer une relation la source ou la cible d'autres relations. Dans le diagramme de modèle de domaine, cliquez avec le bouton droit sur la relation de domaine puis cliquez sur Afficher comme classe. Une zone supplémentaire de classe s'affiche. Vous pouvez ensuite connecter des relations à celui-ci.

Vous pouvez définir une relation en partie par héritage, de la même façon que pour des classes de domaine. sélectionnez la relation dérivée et le relation de base défini dans la fenêtre Propriétés.

une relation dérivée spécialise sa relation de base. Les classes de domaine dont elles créent une liaison doivent être dérivées ou les mêmes que les classes liées par une relation de base. Lorsqu'un lien de la relation dérivée est créé dans un modèle, c'est une instance des relations dérivées et de base. Dans le code du programme, vous pouvez accéder à l'extrémité opposée du lien à l'aide de les propriétés avez généré par la base ou par la classe dérivée.

Voir aussi

Concepts

[redirection] Relations de domaine dans l'API générée

Autres ressources

Domain-Specific Language Tools Glossary