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.
Cette rubrique explique les concepts de base de la définition et de l’utilisation d’un langage spécifique au domaine (DSL) créé avec le Kit de développement logiciel (SDK) de modélisation pour Visual Studio.
Note
Le Kit de développement logiciel (SDK) de transformation de modèle de texte et le Kit de développement logiciel (SDK) De modélisation Visual Studio sont installés automatiquement lorsque vous installez des fonctionnalités spécifiques de Visual Studio. Pour plus d’informations, consultez ce billet de blog.
Si vous débutez avec les DLL, nous vous recommandons de travailler via le laboratoire d’outils DSL, que vous trouverez dans ce site : Kit de développement logiciel (SDK) visualisation et modélisation
Que pouvez-vous faire avec une langue Domain-Specific ?
Un langage spécifique à un domaine est une notation, généralement graphique, conçue pour être utilisée à des fins particulières. En revanche, les langages tels que UML sont à usage général. Dans une DSL, vous pouvez définir les types d’élément de modèle et leurs relations, ainsi que la façon dont ils sont présentés à l’écran.
Lorsque vous avez conçu une DSL, vous pouvez la distribuer dans le cadre d’un package VSIX (Visual Studio Integration Extension). Les utilisateurs travaillent avec la DSL dans Visual Studio :
La notation n'est qu'une partie d'un DSL. Avec la notation, votre package VSIX inclut des outils que les utilisateurs peuvent appliquer pour les aider à modifier et à générer du matériel à partir de leurs modèles.
L’une des principales applications des DLL consiste à générer du code de programme, des fichiers de configuration et d’autres artefacts. En particulier dans les grands projets et les lignes de produits, où plusieurs variantes d’un produit seront créées, la génération de nombreux aspects variables à partir de DSL peut fournir une augmentation importante de la fiabilité et une réponse très rapide aux changements des exigences.
Le reste de cette vue d’ensemble est une procédure pas à pas qui présente les opérations de base de la création et de l’utilisation d’un langage spécifique à un domaine dans Visual Studio.
Prerequisites
Pour définir une DSL, vous devez avoir installé les composants suivants :
| Composant | Lien |
|---|---|
| Visual Studio | http://go.microsoft.com/fwlink/?LinkId=185579 |
| Kit de développement logiciel (SDK) Visual Studio | https://go.microsoft.com/fwlink/?linkid=2166172 |
| Kit de développement logiciel (SDK) de modélisation pour Visual Studio |
Note
Le Composant de Transformation de modèle de texte est automatiquement installé dans le cadre de la charge de travail de développement d’extensions pour Visual Studio. Vous pouvez également l’installer à partir de l’onglet Composants individuels de Visual Studio Installer, sous la catégorie SDK, bibliothèques et frameworks. Installez le composant sdk de modélisation à partir de l’onglet Composants individuels .
Créer une solution DSL
Pour créer un langage spécifique au domaine, vous créez une solution Visual Studio à l’aide du modèle de projet langage Domain-Specific.
Dans le menu Fichier , pointez sur Nouveau, puis cliquez sur Projet.
Sous Types de projet, développez le nœud Autres types de projets , puis cliquez sur Extensibilité.
Cliquez sur Concepteur de Langages Spécifiques à un Domaine.
Dans la zone Nom , tapez FamilyTree. Cliquez sur OK.
L’Assistant de langage spécifique à un domaine s’ouvre et affiche une liste de solutions DSL de modèles.
Cliquez sur chaque modèle pour afficher une description,
Les modèles sont des points de départ utiles. Chacune d’entre elles fournit une DSL fonctionnelle complète, que vous pouvez modifier en fonction de vos besoins. En règle générale, vous devez choisir le modèle le plus proche de ce que vous souhaitez créer.
Pour cette procédure pas à pas, choisissez le modèle de langage minimal .
Entrez une extension de nom de fichier pour votre DSL sur la page de l’assistant appropriée. Il s’agit de l’extension que les fichiers contenant des instances de votre DSL utiliseront.
Choisissez une extension qui n’est associée à aucune application de votre ordinateur ou sur un ordinateur sur lequel vous souhaitez installer le DSL. Par exemple, docx et htm seraient des extensions de nom de fichier inacceptables.
L'assistant vous avertira si l'extension que vous avez entrée est utilisée comme DSL. Envisagez d’utiliser une autre extension de nom de fichier. Vous pouvez également réinitialiser l’instance expérimentale du Kit de développement logiciel (SDK) Visual Studio pour effacer les anciens concepteurs expérimentaux. Dans le menu Démarrer de Windows, tapez réinitialiser Visual Studio, puis exécutez la commande Réinitialiser la commande Microsoft Visual Studio Experimental Instance correspondant à votre version de Visual Studio.
Inspectez les autres pages, puis cliquez sur Terminer.
Une solution est générée qui contient deux projets. Ils sont nommés Dsl et DslPackage. Un fichier de diagramme s’ouvre, nommé DslDefinition.dsl.
Note
La plupart du code que vous pouvez voir dans les dossiers des deux projets est généré à partir de DslDefinition.dsl. Pour cette raison, la plupart des modifications apportées à votre DSL sont effectuées dans ce fichier.
L’interface utilisateur ressemble maintenant à l’image suivante.
Cette solution définit un langage spécifique au domaine. Pour plus d’informations, consultez Vue d’ensemble de l’interface utilisateur Domain-Specific Language Tools.
Parties importantes de la solution DSL
Notez les aspects suivants de la nouvelle solution :
Dsl\DslDefinition.dsl Il s’agit du fichier que vous voyez lorsque vous créez une solution DSL. Presque tout le code de la solution est généré à partir de ce fichier, et la plupart des modifications que vous apportez à une définition DSL sont apportées ici. Pour plus d’informations, consultez Utilisation du diagramme de définition DSL.
Projet Dsl Ce projet contient du code qui définit le langage spécifique au domaine.
Projet DslPackage Ce projet contient du code qui permet aux instances de la dll DSL d’être ouvertes et modifiées dans Visual Studio.
Exécution du DSL
Vous pouvez exécuter la solution DSL dès que vous l’avez créée. Plus tard, vous pouvez modifier progressivement la définition DSL, en exécutant à nouveau la solution après chaque modification.
Pour tester le DSL
Cliquez sur Transformer tous les modèles dans la barre d’outils de l’Explorateur de solutions . Cela régénère la plupart du code source à partir de DslDefinition.dsl.
Note
Chaque fois que vous modifiez DslDefinition.dsl, vous devez cliquer sur Transformer tous les modèles avant de reconstruire la solution. Vous pouvez automatiser cette étape. Pour plus d’informations, consultez Comment automatiser la transformation de tous les modèles.
Appuyez sur F5 ou, dans le menu Débogage , cliquez sur Démarrer le débogage.
Le DSL est compilé et installé dans l’instance expérimentale de Visual Studio.
Une instance expérimentale de Visual Studio démarre. L’instance expérimentale prend ses paramètres à partir d’une sous-arborescence distincte du Registre, où les extensions Visual Studio sont inscrites à des fins de débogage. Les instances normales de Visual Studio n’ont pas accès aux extensions inscrites.
Dans l’instance expérimentale de Visual Studio, ouvrez le fichier de modèle nommé Test à partir de l’Explorateur de solutions.
- ou -
Cliquez avec le bouton droit sur le projet débogage, pointez sur Ajouter, puis cliquez sur Élément. Dans la boîte de dialogue Ajouter un élément , sélectionnez le type de fichier de votre DSL.
Le fichier de modèle s’ouvre sous la forme d’un diagramme vide.
La boîte à outils s’ouvre et affiche les outils appropriés au type de diagramme.
Utilisez les outils pour créer des formes et des connecteurs sur le diagramme.
Pour créer des formes, faites glisser l'outil Exemple de forme vers le diagramme.
Pour connecter deux formes, cliquez sur l’outil Exemple de connecteur, cliquez sur la première forme, puis sur la deuxième forme.
Cliquez sur les étiquettes des formes pour les modifier.
Votre Visual Studio expérimental ressemble à l’exemple suivant :
Contenu d’un modèle
Le contenu d’un fichier qui est une instance d’une DSL est appelé modèle. Le modèle contient des éléments de modèle et des liens entre les éléments. La définition DSL spécifie les types d’éléments et de liens du modèle qui peuvent exister dans le modèle. Par exemple, dans une DSL créée à partir du modèle Langage minimal, il existe un type d’élément de modèle et un type de lien.
La définition DSL peut spécifier la façon dont le modèle apparaît sur un diagramme. Vous pouvez choisir parmi un large éventail de styles de formes et de connecteurs. Vous pouvez spécifier que certaines formes apparaissent à l’intérieur d’autres formes.
Vous pouvez afficher un modèle en tant qu’arborescence dans l’affichage Explorateur pendant que vous modifiez un modèle. Lorsque vous ajoutez des formes au diagramme, les éléments de modèle apparaissent également dans l’Explorateur. L’Explorateur peut être utilisé même s’il n’existe aucun diagramme.
Si vous ne pouvez pas voir l’Explorateur dans l’instance de débogage de Visual Studio, dans le menu Affichage, pointez sur Autres Fenêtres, puis cliquez sur <Votre Explorateur de langues>.
API de votre DSL
Votre DSL génère une API qui vous permet de lire et de mettre à jour des modèles qui sont des instances de la DSL. Une application de l’API consiste à générer des fichiers texte à partir d’un modèle. Pour plus d’informations, consultez Design-Time génération de code à l’aide de modèles de texte T4.
Dans la solution de débogage, ouvrez les fichiers de modèle avec l’extension ".tt". Ces exemples montrent comment générer du texte à partir de modèles et vous permettent de tester l’API de votre DSL. L’un des exemples est écrit en Visual Basic, l’autre en Visual C#.
Sous chaque fichier modèle se trouve le fichier qu'il génère. Développez le fichier de modèle dans l’Explorateur de solutions et ouvrez le fichier généré.
Le fichier de modèle contient un segment court de code qui répertorie tous les éléments du modèle.
Le fichier généré contient le résultat.
Lorsque vous modifiez un fichier de modèle, vous verrez les modifications correspondantes dans les fichiers générés après avoir régénéré les fichiers.
Pour régénérer des fichiers texte après avoir modifié le fichier de modèle
Dans l’instance expérimentale de Visual Studio, enregistrez le fichier de modèle.
Assurez-vous que le paramètre de nom de fichier dans chaque fichier .tt fait référence au fichier de modèle que vous utilisez pour les expériences. Enregistrez le fichier .tt.
Cliquez sur Transformer tous les modèles dans la barre d’outils de l’Explorateur de solutions.
- ou -
Cliquez avec le bouton droit sur les modèles que vous souhaitez régénérer, puis cliquez sur Exécuter l’outil personnalisé.
Vous pouvez ajouter n’importe quel nombre de fichiers de modèle de texte à un projet. Chaque modèle génère un fichier de résultats.
Note
Lorsque vous modifiez la définition DSL, l’exemple de code de modèle de texte ne fonctionnera pas, sauf si vous le mettez à jour.
Pour plus d’informations, consultez Générer du code à partir d’un langage Domain-Specific et écrire du code pour personnaliser une langue Domain-Specific.
Personnalisation de la DSL
Lorsque vous souhaitez modifier la définition DSL, fermez l’instance expérimentale et mettez à jour la définition dans l’instance principale de Visual Studio.
Note
Après avoir modifié la définition DSL, vous risquez de perdre des informations dans les modèles de test que vous avez créés à l’aide de versions antérieures. Par exemple, la solution de débogage contient un fichier nommé Sample, qui contient des formes et des connecteurs. Une fois que vous avez commencé à développer votre définition DSL, elles ne seront pas visibles et elles seront perdues lorsque vous enregistrez le fichier.
Vous pouvez créer une grande variété d’extensions pour votre DSL. Les exemples suivants vous donnent une impression des possibilités.
Après chaque modification, enregistrez la définition DSL, cliquez sur Transformer tous les modèles dans l’Explorateur de solutions, puis appuyez sur F5 pour expérimenter la DSL modifiée.
Renommer les types et les outils
Renommez les classes et relations de domaine existantes. Par exemple, à partir d’une définition Dsl créée à partir du modèle de langage minimal, vous pouvez effectuer les opérations de renommage suivantes pour que la DSL représente des arborescences de familles.
Pour renommer des classes de domaine, des relations et des outils
Dans le diagramme DslDefinition, renommez ExampleModel en FamilyTreeModel, ExampleElement en Person, Targets to Parents et Sources to Children. Vous pouvez cliquer sur chaque étiquette pour la modifier.
Renommez les outils d’élément et de connecteur.
Ouvrez la fenêtre Explorateur DSL en cliquant sur l’onglet sous l’Explorateur de solutions. Si vous ne pouvez pas le voir, dans le menu Affichage , pointez sur Autres fenêtres , puis cliquez sur Explorateur DSL. L’Explorateur DSL est visible uniquement lorsque le diagramme définition DSL est la fenêtre active.
Ouvrez la fenêtre Propriétés et positionnez-la de sorte que vous puissiez voir l’Explorateur DSL et les propriétés en même temps.
Dans l’Explorateur DSL, développez Éditeur, Volets de l'outil, <votre DSL>, puis Outils.
Cliquez sur ExampleElement. Il s’agit de l’élément de boîte à outils utilisé pour créer des éléments.
Dans la fenêtre Propriétés, remplacez la propriété Name par Person.
Notez que la propriété Caption change également.
De la même façon, remplacez le nom de l’outil ExampleConnector par ParentLink. Modifiez la propriété Caption pour qu’elle ne soit pas une copie de la propriété Name. Par exemple, entrez Parent Link.
Reconstruisez la ligne DSL.
Enregistrez le fichier de définition DSL.
Cliquez sur Transformer tous les modèles dans la barre d’outils de l’Explorateur de solutions
Appuyez sur F5. Attendez que l’instance expérimentale de Visual Studio apparaisse.
Dans la solution débogage dans l’instance expérimentale de Visual Studio, ouvrez un fichier de modèle de test. Faites glisser des éléments dessus à partir de la boîte à outils. Notez que les légendes de l’outil et les noms de type dans l’Explorateur DSL ont changé.
Enregistrez le fichier de modèle.
Ouvrez un fichier .tt et remplacez les occurrences de l’ancien type et des noms de propriétés par les nouveaux noms.
Assurez-vous que le nom de fichier spécifié dans le fichier .tt spécifie votre modèle de test.
Enregistrez le fichier .tt. Ouvrez le fichier généré pour voir le résultat de l’exécution du code dans le fichier .tt. Vérifiez qu’il est correct.
Ajouter des propriétés de domaine aux classes
Ajoutez des propriétés à une classe de domaine, par exemple pour représenter les années de naissance et de décès d’une personne.
Pour rendre les nouvelles propriétés visibles sur le diagramme, vous devez ajouter des décorateurs à la forme qui représente l’élément modèle. Vous devez également mapper les propriétés aux décorateurs.
Pour ajouter des propriétés et les afficher
Ajoutez les propriétés.
Dans le diagramme de définition DSL, cliquez avec le bouton droit sur la classe de domaine Person , pointez sur Ajouter, puis cliquez sur Propriété de domaine.
Tapez une liste de nouveaux noms de propriétés, tels que Naissance et Mort. Appuyez sur Entrée après chacune d’elles.
Ajoutez des décorateurs qui affichent les propriétés de la forme.
Suivez la ligne grise qui s’étend de la classe de domaine Person à l’autre côté du diagramme. Ceci est une carte d'éléments de diagramme. Il lie la classe de domaine à une classe de forme.
Cliquez avec le bouton droit sur cette classe de forme, pointez sur Ajouter, puis cliquez sur Décorateur de texte.
Ajoutez deux décorateurs avec des noms tels que BirthDecorator et DeathDecorator.
Sélectionnez chaque nouveau décorateur, puis, dans la fenêtre Propriétés, définissez le champ Position . Cela détermine l’emplacement d’affichage de la valeur de propriété de domaine sur la forme. Par exemple, définissez InnerBottomLeft et InnerBottomRight.
Associez les décorateurs aux propriétés.
Ouvrez la fenêtre Détails de DSL. Il se trouve généralement dans un onglet en regard de la fenêtre Sortie. Si vous ne pouvez pas le voir, dans le menu Affichage , pointez sur Autres fenêtres, puis cliquez sur Détails de DSL.
Dans le diagramme de définition DSL, cliquez sur la ligne qui connecte la classe de domaine Person à la classe de forme.
Dans détails DSL, sous l’onglet Cartes de décorateur, cliquez sur la case à cocher d’un décorateur non assigné. Dans Display Property, sélectionnez la propriété de domaine à laquelle vous souhaitez qu’elle soit mappée. Par exemple, associez BirthDecorator à Birth.
Enregistrez la DSL, cliquez sur Transformer tous les modèles, puis appuyez sur F5.
Dans un exemple de diagramme de modèle, vérifiez que vous pouvez maintenant cliquer sur les positions que vous avez choisies et taper des valeurs dans celles-ci. En outre, lorsque vous sélectionnez une forme Person , la fenêtre Propriétés affiche les nouvelles propriétés Naissance et Mort.
Dans un fichier .tt, vous pouvez ajouter du code qui obtient les propriétés de chaque personne.
Définir de nouvelles classes
Vous pouvez ajouter des classes de domaine et des relations à un modèle. Par exemple, vous pouvez créer une classe pour représenter des villes et une nouvelle relation pour représenter qu’une personne vivait dans une ville.
Pour rendre les différents types distincts sur un diagramme de modèle, vous pouvez mapper les classes de domaine à différents types de formes ou aux formes avec différentes géométries et couleurs.
Pour ajouter et afficher une nouvelle classe de domaine
Ajoutez une classe de domaine et définissez-la comme enfant de la racine du modèle.
Dans le diagramme de définition DSL, cliquez sur l’outil Relation d’incorporation , sur la classe racine FamilyTreeModel, puis sur une partie vide du diagramme.
Une nouvelle classe de domaine s’affiche, qui est connectée à FamilyTreeModel avec une relation d’incorporation.
Définissez son nom, par exemple Ville.
Note
Chaque classe de domaine, à l’exception de la racine du modèle, doit être la cible d’au moins une relation d’incorporation, ou elle doit hériter d’une classe qui est la cible d’une incorporation. Pour cette raison, il est souvent pratique de créer une classe de domaine en utilisant l’outil de Relation d'incorporation.
Ajoutez une propriété de domaine à la nouvelle classe, par exemple Name.
Ajoutez une relation de référence entre Person et Town.
Cliquez sur l’outil Relation de référence , cliquez sur Personne, puis sur Ville.
Note
Les relations de référence représentent des références croisées d’une partie de l’arborescence du modèle à une autre.
Ajoutez une forme pour représenter des villes sur les diagrammes de modèle.
Faites glisser une forme Geometry de la boîte à outils vers le diagramme et renommez-la, par exemple TownShape.
Dans la fenêtre Propriétés, définissez les champs Apparence de la nouvelle forme, tels que Couleur de remplissage et Géométrie.
Ajoutez un décorateur pour afficher le nom de la ville et renommez-le NameDecorator. Définissez sa propriété Position.
Associer la classe de domaine Town à TownShape.
Cliquez sur l’outil Diagramme Element Map , puis sur la classe de domaine Town, puis sur la classe de forme TownShape.
Dans l’onglet Cartes de décorateur de la fenêtre Détails DSL avec le connecteur de carte sélectionné, cochez NameDecorator et définissez La propriété d’affichage sur Name.
Créez un connecteur pour afficher la relation entre personne et villes.
Faites glisser un connecteur de la boîte à outils vers le diagramme. Renommez-le et définissez ses propriétés d’apparence.
Utilisez l’outil Diagramme Element Map pour lier le nouveau connecteur à la relation entre Person et Town.
Créez un outil d’élément pour créer une nouvelle ville.
Dans l’Explorateur DSL, développez l’Éditeur , puis les onglets de boîte à outils.
Cliquez avec le bouton droit sur <votre DSL> , puis cliquez sur Ajouter un nouvel outil d’élément.
Définissez la propriété Name de l’outil nouveau et définissez sa propriété Class sur Town.
Définissez la propriété Icône de boîte à outils . Cliquez sur [...] et dans le champ Nom du fichier, sélectionnez un fichier d’icône.
Créez un outil de connecteur pour établir un lien entre les villes et les gens.
Cliquez avec le bouton droit sur <votre DSL> , puis cliquez sur Ajouter un nouvel outil de connecteur.
Définissez la propriété Name du nouvel outil.
Dans la propriété ConnectionBuilder , sélectionnez le générateur qui contient le nom de la relation Person-Town.
Définissez l’icône boîte à outils.
Enregistrez la définition DSL, cliquez sur Transformer tous les modèles, puis appuyez sur F5.
Dans l’instance expérimentale de Visual Studio, ouvrez un fichier de modèle de test. Utilisez les nouveaux outils pour créer des villes et des liens entre les villes et les personnes. Notez que vous pouvez uniquement créer des liens entre les types d’éléments appropriés.
Créez du code qui répertorie la ville dans laquelle vit chaque personne. Les modèles de texte sont l’un des endroits où vous pouvez exécuter ce code. Par exemple, vous pouvez modifier le fichier Sample.tt existant dans la solution débogage afin qu’il contienne le code suivant :
<#@ template inherits="Microsoft.VisualStudio.TextTemplating.VSHost.ModelingTextTransformation" debug="true" #> <#@ output extension=".txt" #> <#@ FamilyTree processor="FamilyTreeDirectiveProcessor" requires="fileName='Sample.ftree'" #> <# foreach (Person person in this.FamilyTreeModel.People) { #> <#= person.Name #><#if (person.Town != null) {#> of <#= person.Town.Name #> <#}#> <# foreach (Person child in person.Children) { #> <#= child.Name #> <# } } #>Lorsque vous enregistrez le fichier *.tt, il crée un fichier filiale qui contient la liste des personnes et de leurs résidences. Pour plus d’informations, consultez Génération de code à partir d’un langage Domain-Specific.
Validation et commandes
Vous pouvez développer davantage cette DSL en ajoutant des contraintes de validation. Ces contraintes sont des méthodes que vous pouvez définir, qui vérifient que le modèle est dans un état correct. Par exemple, vous pouvez définir une contrainte pour vous assurer que la date de naissance d’un enfant est ultérieure à celle de ses parents. La fonctionnalité de validation affiche un avertissement si l’utilisateur DSL tente d’enregistrer un modèle qui interrompt l’une des contraintes. Pour plus d’informations, consultez Validation dans une langue Domain-Specific.
Vous pouvez également définir des commandes de menu que l’utilisateur peut appeler. Les commandes peuvent modifier le modèle. Ils peuvent également interagir avec d’autres modèles dans Visual Studio et avec des ressources externes. Pour plus d’informations, consultez Comment : Modifier une commande de menu standard.
Déploiement de la DSL
Pour permettre à d’autres utilisateurs d’utiliser le langage spécifique au domaine, vous distribuez un fichier VSIX (Visual Studio Extension). Cela est créé lorsque vous générez la solution DSL.
Recherchez le fichier .vsix dans le dossier bin de votre solution. Copiez-le sur l’ordinateur sur lequel vous souhaitez l’installer. Sur cet ordinateur, double-cliquez sur le fichier VSIX. La DSL peut être utilisée dans toutes les instances de Visual Studio sur cet ordinateur.
Vous pouvez utiliser la même procédure pour installer la DSL sur votre propre ordinateur afin que vous n’ayez pas besoin d’utiliser l’instance expérimentale de Visual Studio.
Pour plus d’informations, consultez Déploiement de solutions linguistiques Domain-Specific.
Suppression d'anciens DSL expérimentaux
Si vous avez créé des DLL expérimentales que vous ne souhaitez plus, vous pouvez les supprimer de votre ordinateur en réinitialisant l’instance expérimentale de Visual Studio.
Cela supprimera de votre ordinateur toutes les DLL expérimentales et d’autres extensions Visual Studio expérimentales. Il s’agit d’extensions qui ont été exécutées en mode débogage.
Cette procédure ne supprime pas les DLL ou d’autres extensions Visual Studio qui ont été entièrement installées en exécutant le fichier VSIX.
Pour réinitialiser l’instance expérimentale de Visual Studio
Dans le menu Démarrer de Windows, tapez réinitialiser Visual Studio, puis exécutez la commande Réinitialiser la commande Microsoft Visual Studio Experimental Instance correspondant à votre version de Visual Studio.
Régénérez les DLL expérimentales ou d’autres extensions Visual Studio expérimentales que vous souhaitez toujours utiliser.