Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Un langage spécifique au domaine (DSL) est défini par son fichier de définition DSL, ainsi que tout code de programme personnalisé que vous pouvez écrire. La plupart du code du programme dans la solution DSL est générée à partir de ce fichier.
Cette rubrique explique les fonctionnalités centrales de la définition DSL.
Définition DSL
Lorsque vous ouvrez Dsl\DslDefinition.dsl, votre fenêtre Visual Studio ressemble à l’image suivante.
Les informations les plus importantes dans la définition DSL sont affichées dans le diagramme de définition DSL. Des informations supplémentaires, qui font également partie de DslDefinition.dsl, sont affichées dans l’Explorateur DSL, qui apparaît généralement à côté du diagramme. Vous utilisez le diagramme pour les tâches les plus fréquentes et avec L’Explorateur DSL pour des personnalisations plus avancées.
Le diagramme de définition DSL 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. Il affiche également les formes et les connecteurs utilisés pour afficher les éléments de modèle à l’utilisateur.
Lorsque vous sélectionnez un élément dans la définition DSL, dans le diagramme ou dans l’Explorateur DSL, des informations sur celle-ci sont affichées dans la fenêtre Propriétés. Des informations supplémentaires peuvent être affichées dans la fenêtre Détails de DSL.
Les modèles sont des instances de DSLs
Un modèle est une instance de votre DSL créée par un utilisateur. Un modèle contient des éléments de modèle, qui sont des instances des classes de domaine que vous définissez et des liens entre les é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 et liens du modèle sur un diagramme. La définition DSL inclut les classes de forme, les classes de connecteur et une classe pour le diagramme.
Une définition DSL est également appelée modèle de domaine. Une définition DSL ou un modèle de domaine est la représentation au moment de la conception du langage spécifique au domaine, tandis que le modèle est l’instanciation au moment de 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 les différents éléments du domaine, et les relations de domaine sont les liens entre les éléments. Il s’agit de la représentation au moment du design des éléments et des liens qui seront instanciés par les utilisateurs du langage spécifique à la conception lorsqu’ils créent leurs modèles.
Cette illustration montre un modèle créé par l’utilisateur d’une bibliothèque de musique DSL. Les albums de musique sont représentés par des boîtes qui contiennent des listes de chansons. Les artistes sont représentés par des boîtes rondes et sont reliés aux albums auxquels ils ont contribué.
La définition DSL sépare deux aspects. L’apparence des éléments de modèle sur le diagramme de modèle est définie à l’aide de classes de forme et de classes de connecteur. Les informations transmises dans le modèle sont définies à l’aide de classes de domaine et de relations de domaine.
L’illustration suivante montre les classes de domaine et les relations dans la définition DSL de la bibliothèque de musique.
L’illustration montre quatre classes de domaine : Musique, Album, Artiste et Chanson. Les classes de domaine définissent des propriétés de domaine telles que Name, Title, etc. Dans le modèle d’instance, les valeurs de certaines de ces propriétés sont affichées sur le diagramme.
Les relations de domaine entre les classes sont : MusicHasAlbums, MusicHasArtists, AlbumHasSongs et ArtistAppearedOnAlbums. Les relations ont des multiplicités telles que 1..1, 0..*. Par exemple, chaque chanson doit être liée à exactement un album par le biais de la relation AlbumHasSongs. Chaque album peut avoir n’importe quel nombre de chansons.
Réorganiser le diagramme de définition DSL
Notez qu’une classe de domaine peut apparaître plusieurs fois dans le diagramme de définition DSL, comme l’album le fait dans cette image. Il existe toujours une vue principale, et il peut y avoir des vues de référence .
Pour réorganiser le diagramme de définition DSL, vous pouvez :
Échangez les vues principales et de référence à l’aide des commandes Bring Tree Here et Split Tree . Cliquez avec le bouton droit sur une classe de domaine unique pour afficher ces commandes.
Réorganisez les classes de domaine et les classes de forme en utilisant les raccourcis clavier Ctrl+Haut et Ctrl+Bas.
Réduisez ou développez des classes à l’aide de l’icône située en haut à droite de chaque forme.
Réduisez les 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 Héritage, cliquez sur la classe dérivée, puis sur la classe de base. Un élément de modèle possède toutes les propriétés définies sur sa propre classe de domaine, ainsi que toutes les propriétés héritées de la classe de base. Il hérite également de 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 rester 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 binaires ; ils lient exactement deux éléments. Toutefois, n’importe quel élément peut avoir de nombreux liens vers d’autres objets, et il peut même y avoir plusieurs liens entre la même paire d’éléments.
Tout comme vous pouvez définir différentes classes d’éléments, vous pouvez définir différentes classes de liens. La classe d’un lien est appelée relation de domaine. Une relation de domaine spécifie les classes d’élément que ses instances peuvent connecter. Chaque fin d’une relation est appelée 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 types de relations de domaine : relations d'intégration et relations de référence. Dans le diagramme de définition DSL, les relations d’incorporation ont des lignes solides à chaque rôle, et les relations de référence ont des lignes pointillées.
Intégration de relations
Chaque élément d’un modèle, à l’exception de sa racine, est la cible d’un lien incorporé. Par conséquent, l’ensemble du modèle forme une arborescence unique de liens incorporés. Une relation d’incorporation représente la contenance ou la propriété. Deux éléments de modèle associés de cette façon sont également appelés parents et enfants. L’enfant est dit être incorporé dans le parent.
Les liens incorporés ne sont généralement pas affichés explicitement en tant que connecteurs sur un diagramme. Au lieu de cela, elles sont généralement représentées par l’endiguement. La racine du modèle est représentée par le diagramme et les éléments incorporés dans celui-ci sont affichés sous forme de formes sur le diagramme.
Dans l’exemple, la classe racine Music a une relation d'emboîtement MusicHasAlbums vers Album, qui a une relation d'emboîtement AlbumHasSongs vers Song. Les chansons sont affichées sous forme d’éléments dans une liste à l’intérieur de chaque album. La musique a également une incorporation de MusicHasArtists à la classe Artist, dont les instances apparaissent également sous forme de 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 un fichier sous forme XML, les éléments incorporés sont imbriqués à l’intérieur de leurs parents, sauf si vous avez personnalisé la sérialisation.
Note
L’incorporation n’est pas la même que l’héritage. Les enfants d'une relation d'intégration n'héritent pas des propriétés des parents. Un ancrage est un type de lien entre les éléments du modèle. L’héritage est une relation entre les classes et ne crée pas de liens entre les éléments de modèle.
Règles d’incorporation
Chaque élément d’un modèle d’instance doit être la cible d’un lien d’incorporation exactement, à l’exception de la racine du modèle.
Par conséquent, chaque classe de domaine non abstraite, à l’exception de la classe racine, doit être la cible d’au moins une relation d’incorporation, ou elle doit hériter d’une incorporation d’une classe de base. Une classe peut être la cible de deux ou plusieurs incorporations, mais ses éléments de modèle d’instance ne 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’intégration
Votre définition DSL crée également un explorateur, que les utilisateurs voient en même temps que leur diagramme de modèle.
L’Explorateur affiche tous les éléments du modèle, même ceux pour lesquels vous n’avez pas défini de formes. Il affiche les éléments et les relations incorporées, mais pas les relations de référence.
Pour afficher les valeurs des propriétés de domaine d’un élément, l’utilisateur sélectionne un élément, dans le diagramme de modèle ou dans l’Explorateur de modèles, puis ouvre la fenêtre Propriétés. Elle affiche toutes les propriétés du domaine, y compris celles qui ne sont pas affichées sur le diagramme. Dans l’exemple, chaque chanson a à la fois un titre et un genre, mais seule la valeur du titre est affichée sur le diagramme.
Relations de référence
Une relation de référence représente tout type de relation qui n’est pas incorporée.
Les relations de référence sont généralement affichées sur un diagramme sous forme de 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 monikers. Autrement dit, les monikers sont des noms qui identifient de manière unique chaque élément du modèle. Le nœud XML de 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 a deux rôles, un rôle source et un rôle cible.
Dans l’image suivante, la ligne entre la classe de domaine Publisher et la relation de domaine PublisherCatalog est le rôle source. La ligne entre la relation de domaine et la classe de domaine Album est le rôle cible.
Les noms associés à une relation sont particulièrement importants lorsque vous écrivez du code de programme qui traverse le modèle. Par exemple, lorsque vous générez la solution DSL, la classe générée Publisher possède une propriété Catalog qui est une collection d’albums. L’album de classe a une propriété Publisher qui est une instance unique de la classe Publisher.
Lorsque vous créez une relation dans une définition DSL, les noms de propriété et de relation reçoivent des valeurs par défaut. Toutefois, vous pouvez les modifier.
Multiplicités
Les multiplicités spécifient le nombre d’éléments pouvant avoir le même rôle dans une relation de domaine. Dans l’exemple, le paramètre de multiplicité zéro-à-plusieurs (0..*) sur le rôle Catalogue spécifie que toute instance de la classe de domaine Publisher peut avoir autant de liens de relation PublisherCatalog que vous souhaitez lui donner.
Configurez la multiplicité d’un rôle en tapant sur le diagramme ou en modifiant la Multiplicity propriété dans la fenêtre Propriétés . Le tableau suivant décrit les paramètres de cette propriété.
| Type de multiplicité | Descriptif |
|---|---|
| 0..* (Zéro à plusieurs) | Chaque instance de la classe de domaine peut avoir plusieurs instances de la relation ou aucune instance de la relation. |
| 0..1 (Zéro à un) | Chaque instance de la classe de domaine ne peut avoir plus d’une instance de la relation ou aucune instance 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 à partir d’une instance de la classe de rôle. Si la validation est activée, une erreur de validation s’affiche quand une instance de la classe de rôle n’a aucune instance de la relation. |
| 1..* (Un à plusieurs) | Chaque instance de la classe sur le rôle qui a 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 quand une instance de la classe de rôle n’a aucune instance de la relation. |
Relations de domaine en tant que classes
Un lien est représenté dans le Store 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 désigner une relation en tant que source ou cible d’autres relations. Dans le diagramme du modèle de domaine, cliquez avec le bouton droit sur la relation de domaine, puis cliquez sur Afficher en tant que classe. Une boîte de classe supplémentaire apparaîtra. Vous pouvez ensuite y connecter des relations.
Vous pouvez définir une relation en partie par héritage, comme vous le pouvez avec les classes de domaine. Sélectionnez la relation dérivée et définissez la relation de base dans la fenêtre Propriétés.
Une relation dérivée se spécialise dans sa relation de base. Les classes de domaine auxquelles il lie doivent être dérivées ou identiques aux classes liées par la relation de base. Lorsqu’un lien de la relation dérivée est créé dans un modèle, il s’agit d’une instance des relations dérivées et de base. Dans le code du programme, vous pouvez accéder à la fin opposée du lien à l’aide des propriétés générées par la base ou par la classe dérivée.