Comment : définir un langage spécifique à un domaine
Pour définir un langage spécifique au domaine, (DSL) vous créez une solution de Visual Studio à partir d'un modèle.La partie fondamentale de la solution est le diagramme de définition DÉSOLÉ, qui est stocké dans DslDefinition.dsl.La définition DÉSOLÉ définit des classes et des formes du diagramme DÉSOLÉ.Après avoir modifié et ajout à ces éléments, vous pouvez ajouter du code de programme pour personnaliser le DÉSOLÉ plus en détail.
Si vous débutez en langages spécifiques à un domaine, nous recommandons que vous travaillez dans DSL Tools Lab, qui se trouve dans ce site : Visualizaton and Modeling SDK
Dans cette rubrique
sélectionner une solution de modèle
Modèles pour définir un DÉSOLÉ
classes d'élément de modèle
formes sur le diagramme
références et connecteurs
Formes qui contiennent des listes : formes de compartiment
ports sur la limite d'une autre forme
Couloirs
Types de propriétés
Personnaliser votre DÉSOLÉ
Dépannage
sélectionner une solution de modèle
Pour définir un langage spécifique à un domaine, vous devez avoir installé les composants suivants :
Visual Studio |
|
Kit de développement logiciel Visual Studio |
|
Kit de développement logiciel de visualisation et de modélisation de Visual Studio |
Pour créer un nouveau langage spécifique au domaine, vous créez une solution de Visual Studio à l'aide de le modèle de projet de langage spécifique à un domaine.
Pour créer une solution DÉSOLÉ
Créez une solution avec le modèle de Langage spécifique au domaine , qui figure sous D'autres types de projet/extensibilité dans la boîte de dialogue de Nouveau projet .
Lorsque vous cliquez sur OK, Assistant de langage spécifique au domaine ouvre et affiche la liste des solutions du modèle DÉSOLÉ.
Cliquez sur chaque modèle pour consulter la description.Sélectionnez la solution qui ressemble le plus étroitement à ce que vous souhaitez créer.
Chaque modèle DÉSOLÉ définit un langage spécifique à un domaine fonctionnel de base.Vous modifierez ce DÉSOLÉ pour répondre à vos propres conditions.
cliquez sur chaque exemple pour plus d'informations.
Sélectionnez Flux de travail pour créer un langage spécifique à un domaine qui a des couloirs.Couloirs sont les partitions verticale ou horizontale du diagramme.
Sélectionnez modèles composants pour créer un langage spécifique à un domaine qui a des ports.Les ports sont des petites formes au bord de plus grande forme.
Sélectionnez diagrammes de classes pour définir un langage spécifique à un domaine qui a des formes de compartiment.les formes de compartiment contiennent des listes d'éléments.
Sélectionnez langage minimal dans d'autres cas, ou si vous ne savez pas.
[!REMARQUE]
Si vous souhaitez créer un diagramme de classes ou un diagramme de composant, envisagez d'utiliser des modèles UML.Les outils de modélisation UML fournissent un jeu de diagrammes qui sont intégrés autour d'un modèle unique.Ils sont extensibles et peuvent être intégrés à votre DÉSOLÉ à l'aide de ModelBus.Pour plus d'informations, consultez Développement de modèles pour la conception logicielle.
Sélectionnez Concepteur minimal de WinForm ou Le Concepteur WPF minimal pour créer un DÉSOLÉ affiché sur une surface de Windows Forms ou WPF.Vous devrez écrire le code pour définir l'éditeur.Pour plus d'informations, consultez les rubriques suivantes :
Création d'un langage spécifique à un domaine basé sur Windows Forms
Écrivez une extension de nom de fichier de votre DÉSOLÉ dans la page de l'assistant appropriée.Il s'agit de l'extension que les fichiers contenant des instances de votre DÉSOLÉ utilisera.
Choisissez une extension de nom de fichier non associée à une application de votre ordinateur, ou dans tout ordinateur sur lequel vous souhaitez installer le langage spécifique à un domaine.par exemple, docx et htm seraient les extensions de nom de fichier inacceptables.
L'Assistant vous avertira si l'extension que vous avez entrée est utilisée comme DÉSOLÉ.envisagez d'utiliser une extension de nom de fichier différente.Vous pouvez également réinitialiser l'instance expérimentale du kit de développement Visual Studio pour effacer les concepteurs expérimentaux anciens.Cliquez sur Démarrer, cliquez sur Tous les programmes, Microsoft Visual Studio 2010 SDK, Outils, puis réinitialisez l'instance expérimentale de Microsoft Visual Studio 2010.
Vous pouvez soit ajuster les paramètres dans les autres pages, ou conservez les valeurs par défaut.
Cliquez sur Terminer.
L'Assistant crée une solution qui contient deux ou trois projets, et génère le code de la définition de langage spécifique à un domaine.
l'interface utilisateur ressemble maintenant à l'image suivante.
Cette solution définit un langage spécifique à un domaine.Pour plus d'informations, consultez Vue d'ensemble de l'interface utilisateur des outils de langage spécifique à un domaine.
testez la solution
La solution de modèle fournit un langage spécifique à un domaine fonctionnel, que vous pouvez modifier ou utiliser telles quelles.
Pour tester la solution, appuyez sur F5 ou le CTRL+F5.Une nouvelle instance de Visual Studio s'ouvre en mode expérimental.
Dans la nouvelle instance de Visual Studio, dans l'explorateur de solutions, ouvrez le fichier d'exemple.Elle s'ouvre sous la forme d'un diagramme, avec une boîte à outils.
Si vous exécutez une solution que vous avez créée à partir de le modèle de langage minimal , votre Visual Studio expérimental ressemblera à l'exemple suivant :
expérience avec les outils.Créez des éléments et connectez-les.
Fermez l'instance expérimentale de Visual Studio.
[!REMARQUE]
Lorsque vous avez modifié le DÉSOLÉ, vous ne pourrez plus consulter les formes sur le fichier de test sur prélèvement.Toutefois, vous pouvez créer de nouveaux éléments.
Modifier le modèle DÉSOLÉ
Renommez et en conservez ou toutes les classes de domaine et classes de forme dans la définition du modèle DÉSOLÉ.Vos nouveaux noms de classe doivent être des noms valides CLR, sans espaces ou ponctuation.
il est particulièrement utile de conserver ces classes :
La classe racine s'affiche dans la partie supérieure gauche du diagramme de définition DÉSOLÉ, sous classes et relations.Renommez -le un nom différent de langage spécifique à un domaine.Par exemple, un MusicLibrary nommé par DÉSOLÉ peut avoir une classe nommée racine Music.
La classe de diagramme s'affiche à droite inférieure du diagramme de définition DÉSOLÉ, dans la colonne d' éléments de diagramme .Vous devrez peut-être faire défiler à droite de la voir.Cela est généralement appelé YourDslSchéma.
Si vous avez utilisé le modèle de Flux de travail et vous souhaitez créer des diagrammes avec des couloirs, la conservation et renommer la classe de domaine d'acteur et la forme d'ActorSwimlane.
Supprimer ou renommer d'autres classes pour répondre à vos besoins.
Modèles pour définir un DÉSOLÉ
Nous vous recommandons de développer un DÉSOLÉ en ajoutant ou en modifiant un ou deux fonctionnalités à la fois.Ajoutez une fonctionnalité, exécutez le code DÉSOLÉ et testez -le, puis ajoutez un ou deux autres fonctionnalités.Une fonctionnalité classique de votre DÉSOLÉ peut être :
Une classe de domaine, la relation d'incorporation qui connecte l'élément au modèle, à la forme requise aux éléments graphiques de cette classe du diagramme, et à l'outil d'élément qui permet aux utilisateurs de créer des éléments.
Les propriétés du domaine d'une classe de domaine et les éléments décoratifs qui les affichent sur une forme.
Une relation de référence et le connecteur qui l'affiche sur le diagramme et l'outil de connecteur qui permet aux utilisateurs de créer des liens.
Une personnalisation qui requiert un code de programme, tel qu'une contrainte de validation ou une commande de menu.
Les sections suivantes décrivent comment construire les types les plus utiles de fonctionnalités de langage spécifique à un domaine.Il existe de nombreuses autres modèles que DÉSOLÉ peut être développé, mais ce sont les plus souvent utilisés.
[!REMARQUE]
Après l'ajout une fonctionnalité, n'oubliez pas de cliquer sur Transformer tous les modèles dans la barre d'outils de l'explorateur de solutions avant de générer et exécuter votre DÉSOLÉ.
L'illustration suivante montre les classes et la partie de relations du code DÉSOLÉ utilisé comme exemple de cette rubrique.
L'illustration suivante est un modèle d'exemple de ce langage DÉSOLÉ :
[!REMARQUE]
« Modèle » fait référence à une instance de votre DÉSOLÉ que les utilisateurs créent et, en général est affiché comme un diagramme.Cette rubrique décrit le schéma de définition DÉSOLÉ et de modèle qui apparaissent lorsque votre DÉSOLÉ est utilisé.
définir des classes de domaine
Les classes de domaine représentent les concepts de votre DÉSOLÉ.les instances sont des éléments de modèle.Par exemple dans un MusicLibrary DÉSOLÉ vous pouvez avoir des classes de domaine nommées Album et chanson.
Pour créer une classe de domaine, vous pouvez faire glisser de l'outil de Domain Classe nommé au diagramme, puis renommez la classe.
Pour plus d'informations, consultez Propriétés des classes de domaine.
créez une relation d'incorporation pour chaque classe de domaine
Chaque classe de domaine à moins que la classe racine doit être la cible d'au moins une relation incorporante, ou il doit hériter d'une classe qui est la cible d'une relation d'incorporation.
Dans un modèle, chaque élément de modèle est un nœud dans une arborescence unique des relations d'incorporation.La source et la cible de la relation d'incorporation est fréquemment désigné par le parent et de l'enfant.
La sélection d'un parent pour une classe de domaine dépend de la manière dont vous souhaitez les durées de vie de ses éléments à dépendre d'autres éléments.Si un nœud d'une arborescence est supprimé, son sous-arbre généralement est également supprimé.Les classes de l'élément qui a une existence indépendante sont donc incorporées directement sous la classe racine.
En général, si vous affichez un élément à l'intérieur d'un autre élément, vous souhaitez spécifier une relation de propriétaire.Dans ce cas, la plupart classe parente appropriée sont la classe du conteneur.L'exception est lorsque l'élément que vous voyez dans un conteneur est réellement un seul lien de référence vers un élément indépendant.Dans ce cas, en supprimant le conteneur supprime la référence mais non sa cible.
Dans les modèles de la définition DÉSOLÉ décrits dans cette rubrique, nous supposerons que les éléments affichés à l'intérieur d'un conteneur seront supprimés lorsque le conteneur est supprimé.des modèles plus complexes sont possibles, et peuvent être accomplies en définissant des règles.
Comment l'élément est rendu |
classe parente (d'incorporation) |
Exemple dans le modèle de solution DÉSOLÉ |
---|---|---|
forme sur le diagramme. Couloir. |
Classe racine DÉSOLÉ. |
Langage minimale. flux de tâche : classe d'acteur. |
Forme dans le couloir. |
Classe de domaine et des éléments affichés comme couloirs. |
flux de tâche : classe de tâche. |
Élément de la liste en forme, où l'élément est supprimé si le conteneur est supprimé. port sur le bord de la forme. |
classe de domaine qui est mappée à la forme de conteneur. |
diagramme de classes : classe d'attributs. diagramme de composant : classe de port. |
élément dans la liste, non supprimée si le conteneur est supprimé. |
Classe racine DÉSOLÉ. Les liens de la référence d'affichages de liste. |
|
Pas directement affiche. |
la classe dont elle fait partie. |
Dans l'exemple de médiathèque, des albums sont affichés comme des rectangles dans lesquels les titres de chansons sont répertoriés.par conséquent le parent de l'album est la musique de classe racine, et le parent de la chanson est album.
Pour créer une classe de domaine et son incorporer en même temps, cliquez sur l'outil de relation d'incorporation , cliquez sur la classe parente, puis cliquez sur sur une partie vide du diagramme.
Il n'est en général pas nécessaire d'ajuster le nom de la relation d'incorporation et de ses rôles, car ils suivront les noms de classes automatiquement.
Pour plus d'informations, consultez Propriétés des relations de domaine et Propriétés des rôles de domaine.
[!REMARQUE]
L'incorporation n'est pas les mêmes que l'héritage.Les enfants dans une relation d'incorporation n'héritent pas des fonctionnalités leurs parents.
Ajoutez des propriétés de domaine à chaque classe de domaine
Stockent des valeurs de propriétés de domaine.les exemples sont : Nom, title, date de parution.
Cliquez sur propriétés de domaine dans la classe, appuyez sur la touche ENTRÉE, puis entrez le nom d'une propriété.le type par défaut d'une propriété de domaine est chaîne.Si vous souhaitez modifier le type, sélectionnez la propriété de domaine, puis définissez Type dans la fenêtre de Propriétés .Si le type que vous voulez n'est pas dans la liste déroulante, consultez Types de propriété d'addition.
définissez une propriété de nom d'élément. sélectionnez une propriété de domaine qui peut être utilisée pour identifier des éléments dans l'explorateur de langage.Par exemple, dans la classe de domaine de chanson que vous pouvez sélectionner la propriété de champ de titre.dans la fenêtre de Propriétés , définissez Est le nom de l'élément à true.
Créez des classes dérivées de domaine
Si vous souhaitez une classe de domaine pour avoir des variantes qui héritent de ses propriétés et relations, créez des classes qui dérivent de celle-ci.Par exemple, l'album peut avoir des classes dérivées WMA et MP3.
Créez la classe dérivée à l'aide de l'outil classe de domaine .
Cliquez sur l'outil de Héritage , cliquez sur la classe dérivée, puis cliquez sur la classe de base.
envisagez de définir modificateur d'héritage de la classe de base à résumé.Si vous pensez que vous pouvez avoir besoin des instances de la classe de base, envisagez de créer à la place une classe dérivée distincte pour elles.
Les classes dérivées héritent des propriétés et les rôles de leurs classes de base.
Rangez le diagramme de définition DÉSOLÉ
Lorsque vous ajoutez des relations, certaines de vos classes s'affichent dans plusieurs emplacements.Pour réduire le nombre d'apparences et rendre le diagramme plus large, cliquez avec le bouton droit sur la classe cible d'une relation, puis cliquez sur apportez l'arborescence ici.Pour l'effet opposé, cliquez avec le bouton droit sur la classe cible d'une relation et cliquez sur fractionnez l'arborescence.Si vous ne voyez pas ces commandes de menu, vérifiez que seule la classe de domaine est sélectionnée.
Utilisez CTRL+Up et CTRL+Down pour déplacer des classes de domaine et des classes de forme.
testez les classes de domaine
pour tester les nouvelles classes de domaine
Cliquez sur la transformation tous les modèles dans la barre d'outils de l'explorateur de solutions, pour générer le code concepteur de langage spécifique à un domaine.vous pouvez automatiser cette étape.Pour plus d'informations, consultez Comment : automatiser la transformation de tous les modèles.
Générez et exécutez le langage spécifique à un domaine. Appuyez sur F5 ou CTRL+F5 pour exécuter une nouvelle instance de Visual Studio en mode expérimental.Dans l'instance expérimentale de Visual Studio, ouvrez ou créez un fichier qui porte l'extension de nom de fichier de votre DÉSOLÉ.
ouvrez l'explorateur. Sur le côté du diagramme est la fenêtre explorateur de langage, qui est généralement nommée explorateur de YourLanguage .Si vous ne voyez pas cette fenêtre, elle peut être sur un onglet sous l'explorateur de solutions.Si vous ne pouvez pas rechercher, dans le menu d' Afficher , pointez sur Autres fenêtres, puis cliquez sur YourLanguagede solutions.
Votre explorateur affiche une arborescence du modèle.
Créez de nouveaux éléments. Cliquez avec le bouton droit sur le nœud racine au haut, puis cliquez sur Ajout d'un enregistrementYourClass.
Une nouvelle instance de votre classe s'affiche dans votre explorateur de langage.
Vérifiez que chaque instance a un nom différent lorsque vous créez des instances.Cela se produit uniquement si vous avez défini la balise d' Est le nom de l'élément sur une propriété de domaine.
examinez les propriétés de domaine. Avec une instance de votre classe sélectionnée, analysez la fenêtre Propriétés.Elle doit vous indiquer aux propriétés de domaine ces a défini sur cette classe de domaine.
Enregistrez le fichier, fermez -le, puisrouvrez -le.Toutes les instances créées doivent être visibles dans l'explorateur, une fois que vous avez développé les nœuds.
définir des formes sur le diagramme
Vous pouvez définir des classes des éléments qui apparaissent dans un diagramme comme rectangles, ellipses, ou icônes.
Pour définir une classe des éléments qui apparaissent comme formes sur un diagramme
Définissez et testez une classe de domaine décrite en définissant des classes de domaine**.**
Le parent de la classe doit être la classe racine.Autrement dit, il doit y a une relation d'incorporation entre la classe racine et la nouvelle classe de domaine.
Si votre diagramme possède des couloirs, le parent peut être la classe de domaine qui est mappée à un couloir.Avant de poursuivre cette procédure, consultez Définissant un DÉSOLÉ qui a Couloirs.
Ajoutez une classe de forme pour représenter les éléments du diagramme de modèle.Faites glisser l'un des outils suivants dans le diagramme de définition DÉSOLÉ :
Forme géométrique fournit un rectangle ou une ellipse.
forme d'image affiche une image que vous fournissez.
forme de compartiment est un rectangle qui contient une ou plusieurs listes d'éléments.
Renommez la classe de forme, qui apparaîtra à droite du schéma de définition DÉSOLÉ, sous les formes et les connecteurs.
Définissez une image, si vous avez créé une forme d'image.
Créez un fichier image de toute taille.Les formats BMP, JPEG, GIF et EMF sont pris en charge.
Dans l'explorateur de solutions, ajoutez le fichier à la solution dans DÉSOLÉ \Resources.
Revenez au schéma de définition DÉSOLÉ et sélectionnez la nouvelle classe de forme d'image.
dans la fenêtre Propriétés, cliquez sur la propriété d'image.
Dans la boîte de dialogue de Sélectionner une image , cliquez sur le menu déroulant sous Nom de fichier, puis sélectionnez l'image.
Ajoutez des éléments décoratifs de texte à la forme, pour afficher les propriétés de domaine.
Pour afficher le nom ou le titre de l'élément de modèle, vous aurez probablement besoin d'au moins un élément décoratif de texte.
Cliquez avec le bouton droit sur l'en-tête de la classe de forme, pointez sur Ajouter, puis cliquez sur Texte de décorateur.Définissez le nom de l'élément décoratif, et dans la fenêtre Propriétés affectez à son Position.
Connectez chaque forme avec un mappage d'élément de diagramme à la classe de domaine qu'elle doit afficher.
cliquez sur l'outil de Mappage d'élément de diagramme , puis cliquez sur la classe de domaine, puis cliquez sur la classe de forme.
Mappez les propriétés aux éléments décoratifs de texte.
Sélectionnez la ligne gris entre la classe de domaine et la classe de forme qui représente le mappage d'élément de diagramme.
dans la fenêtre de Détails DÉSOLÉ , cliquez sur l'onglet de Mappage de décorateur .Si vous ne voyez pas la fenêtre de Détails DÉSOLÉ , dans le menu d' Afficher , pointez sur Autres fenêtres puis sur) Détails DÉSOLÉ.Il est souvent nécessaire de déclencher le haut de cette fenêtre pour consulter tout son contenu.
Sélectionnez le nom d'un élément décoratif.sous Propriétés d'affichage, sélectionnez le nom d'une propriété de la classe de domaine.Répétez cette étape pour chaque élément décoratif.
si vous souhaitez afficher une propriété d'un élément associé, cliquez sur le navigateur déroulant d'arborescence sous chemin d'accès à la propriété d'affichage.
Assurez -vous qu'une coche apparaît en regard de chaque nom de décorateur.
faites un élément de boîte à outils pour créer des éléments de la classe de domaine.
Dans Explorateur DÉSOLÉ, développez le nœud d' Éditeur et tous ses sous-nœuds.
Cliquez avec le bouton droit sur le nœud sous Onglets de la boîte à outils portant le même nom que votre DÉSOLÉ, par exemple MusicLibrary.cliquez sur ajoutez l'outil d'élément.
[!REMARQUE]
Si vous cliquez avec le bouton droit sur le nœud d' Outils , vous ne verrez pas ajoutez l'outil d'élément.Au lieu de cela, cliquez sur le nœud immédiatement supérieur.
dans la fenêtre Propriétés avec le nouvel outil d'élément sélectionné, définissez Classe à la classe de domaine que vous avez récemment ajoutée.
définissez légende et info-bulle.
Définissez icône de boîte à outils à une icône qui s'affichera dans la boîte à outils.Vous pouvez lui affecter à une nouvelle icône ou une icône déjà utilisée pour un autre outil.
Pour créer une nouvelle icône, ouvrez DÉSOLÉ \Resources dans Explorateur de solutions.Copiez et collez l'un des fichiers existants BMP d'outils d'élément.Renommez la copie collée, puis double-cliquez sur pour la modifier.
Revenez au schéma de définition DÉSOLÉ, sélectionnez l'outil, et dans cliquez sur [...] de fenêtre Propriétés de icône de boîte à outils.Dans la boîte de dialogue de Sélectionnez l'image bitmap , sélectionnez votre fichier de .BMP dans le menu déroulant.
Pour plus d'informations, consultez Propriétés des formes de géométrie et Propriétés des formes d'image.
pour tester des formes
Cliquez sur la transformation tous les modèles dans la barre d'outils de l'explorateur de solutions, pour générer le code concepteur de langage spécifique à un domaine.
Générez et exécutez le langage spécifique à un domaine. Appuyez sur F5 ou CTRL+F5 pour exécuter une nouvelle instance de Visual Studio en mode expérimental.Dans l'instance expérimentale de Visual Studio, ouvrez ou créez un fichier qui porte l'extension de nom de fichier de votre DÉSOLÉ.
Vérifiez que les outils d'élément s'affichent dans la boîte à outils.
Créez les formes en faisant glisser un outil sur le diagramme de modèle.
Vérifiez que chaque élément décoratif de texte s'affiche, et que :
Vous pouvez le modifier, à moins d'avoir défini la balise d' Est l'interface utilisateur en lecture seule sur la propriété de domaine.
Lorsque vous modifiez la propriété dans la fenêtre Propriétés ou dans le élément décoratif, l'autre vue est mise à jour.
Après avoir testé d'abord une forme, vous pouvez régler certains ses propriétés et ajouter encore plus de fonctionnalités avancées.Pour plus d'informations, consultez Personnalisation et extension d'un langage spécifique à un domaine.
définir des relations de référence
Vous pouvez définir une relation de référence entre n'importe quelle classe de domaine source et toute classe de domaine cible.Les relations de référence sont généralement affichées sur un diagramme comme connecteurs, qui sont des lignes entre les formes.
Par exemple, si les albums de musique et les artistes sont affichés comme des formes sur votre diagramme, vous pouvez définir une relation nommée ArtistsAppearedOnAlbums qui lie les artistes des albums sur lesquels ils ont travaillé.Consultez l'exemple dans l'illustration.
Les relations de référence peuvent également des éléments de lien du même type.Par exemple, dans un domaine (représentant une arborescence généalogique, la relation entre les parents et leurs enfants est une relation de référence individuels à personne.
définissez une relation de référence
Cliquez sur l'outil de relation de référence, puis cliquez sur la classe de domaine source de la relation, puis cliquez sur la classe de domaine cible.La classe cible peut être identique à la classe source.
chaque relation a deux rôles, représentés par la ligne sur chaque côté de la zone de relation.vous pouvez sélectionner chaque rôle et définir ses propriétés dans la fenêtre Propriétés.
Pensez à renommer les rôles.Par exemple, dans une relation entre la personne et la personne, vous pouvez modifier les noms par défaut les parents et les enfants, le gestionnaire et les subordonnées, enseignant et étudiant, et ainsi de suite.
Ajustez les multiplicités de chaque rôle, si nécessaire.Si vous souhaitez que chaque personne pour avoir qu'un gestionnaire, définissez la multiplicité qui apparaît sous le nom de gestionnaire sur le diagramme à 0..1.
Ajoutez des propriétés de domaine à la relation. dans l'illustration, la relation d'Artiste-Album a une propriété de rôle.
Définissezla propriété dePermet les doublonsde la relation, si plusieurs lien de la même classe peut exister entre les mêmes paires d'éléments de modèle.Par exemple, vous pouvez autoriser un professeur pour enseigner plusieurs soumis au même étudiant.
Pour plus d'informations, consultez Propriétés des relations de domaine et Propriétés des rôles de domaine.
définissez un connecteur pour afficher la relation
un connecteur affiche une ligne entre deux formes sur le diagramme de modèle.
Faites glisser l'outil de Connecteur sur le diagramme de définition de langage spécifique à un domaine.
Ajoutez des éléments décoratifs de texte si vous souhaitez afficher les noms sur le connecteur.définissez leurs positions.Pour permettre à l'utilisateur de déplacer un élément décoratif de texte, définissez sa propriété d' est mobile .
utilisez l'outil de Mappage d'élément de diagramme pour lier le connecteur à la relation de référence.
Le mappage d'élément de diagramme est sélectionné, ouvrez la fenêtre de Détails DÉSOLÉ , ouvrez l'onglet de Mappage de décorateur .
Sélectionnez chaque décorateur et Propriétés d'affichage affectez à la propriété de domaine correcte.
Assurez -vous qu'une coche apparaît en regard de chaque élément de la liste d' Éléments décoratifs .
Définissez un outil de génération de connexion
Dans la fenêtre d' Explorateur DÉSOLÉ , développez le nœud d' Éditeur et tous ses sous-nœuds.
Cliquez avec le bouton droit sur le nœud portant le même nom que votre DÉSOLÉ, puis cliquez sur ajoutez le nouvel outil de connexion.
Pendant que le nouvel outil est sélectionné, dans la fenêtre Propriétés :
définissez légende et info-bulle.
Cliquez sur Concepteur de connexion et sélectionnez le concepteur approprié pour la nouvelle relation.
Définissez icône de boîte à outils à l'icône que vous souhaitez afficher dans la boîte à outils.Vous pouvez définir à une nouvelle icône ou une icône déjà utilisée pour un autre outil.
Pour créer une nouvelle icône, ouvrez DÉSOLÉ \Resources dans Explorateur de solutions.Copiez et collez l'un des fichiers existants BMP d'outils d'élément.Renommez la copie collée, puis double-cliquez sur pour la modifier.
Revenez au schéma de définition DÉSOLÉ, sélectionnez l'outil, et dans cliquez sur [...] de fenêtre Propriétés de icône de boîte à outils.Dans la boîte de dialogue de Sélectionnez l'image bitmap , sélectionnez votre fichier de .BMP dans le menu déroulant.
pour tester une relation et un connecteur de référence
Cliquez sur la transformation tous les modèles dans la barre d'outils de l'explorateur de solutions, pour générer le code concepteur de langage spécifique à un domaine.
Générez et exécutez le langage spécifique à un domaine. Appuyez sur F5 ou CTRL+F5 pour exécuter une nouvelle instance de Visual Studio en mode expérimental.Dans l'instance expérimentale de Visual Studio, ouvrez ou créez un fichier qui porte l'extension de nom de fichier de votre DÉSOLÉ.
Vérifiez que l'outil de connexion apparaît dans la boîte à outils.
Créez les formes en faisant glisser un outil sur le diagramme de modèle.
Créer des connexions entre les formes.Cliquez sur l'outil de connecteur, cliquez sur une forme, puis cliquez sur une autre forme.
Vérifiez que vous ne pouvez pas créer des connexions entre les classes inappropriées. par exemple, si votre relation est entre les albums et les artistes, vérifiez que vous ne pouvez pas lier des artistes aux artistes.
Vérifiez que les multiplicités sont correctes. Par exemple, vérifiez que vous ne pouvez pas associer une personne à plusieurs gestionnaire.
Vérifiez que chaque élément décoratif de texte s'affiche, et que :
Vous pouvez le modifier, à moins d'avoir défini la balise d' Est l'interface utilisateur en lecture seule sur la propriété de domaine.
Lorsque vous modifiez la propriété dans la fenêtre Propriétés ou dans le élément décoratif, l'autre vue est mise à jour.
Après avoir testé d'abord un connecteur, vous pouvez régler certains ses propriétés et ajouter encore plus de fonctionnalités avancées.Pour plus d'informations, consultez Personnalisation et extension d'un langage spécifique à un domaine.
Définition des formes qui contiennent des listes : formes de compartiment
Une forme de compartiment contient une ou plusieurs listes d'éléments.Par exemple, une médiathèque DÉSOLÉ, vous pouvez utiliser des formes de compartiment pour représenter des albums de musique.Dans chaque album, il existe une liste de chansons.
Dans la méthode la plus simple d'obtenir cet effet dans une définition DÉSOLÉ, vous définissez une classe de domaine pour le conteneur, et une classe de domaine pour chaque liste.la classe de conteneur est mappée à la forme de compartiment.
Pour plus d'informations, consultez Propriétés des formes de compartiment.
pour définir une forme de compartiment
Créez la classe de domaine du conteneur.Cliquez sur l'outil de relation d'incorporation , cliquez sur la classe racine du modèle, puis dans une partie vide du diagramme de définition de langage spécifique à un domaine.Cela crée la classe de domaine qui est nommée Album dans le chiffre d'exemple.
Vous pouvez également au lieu de l'incorporation dans la classe racine, vous pouvez incorporer le conteneur dans une classe de domaine qui est mappée à un couloir.
ajoutez une propriété de domaine telle que le nom à la classe, et définissez sa balise d' Est le nom de l'élément dans la fenêtre Propriétés.
créez la classe de domaine d'élément de liste.Cliquez sur l'outil de relation d'incorporation , cliquez sur la classe de conteneur (album) puis dans une partie vide du diagramme.Cela crée la classe de domaine qui est nommée Song dans le chiffre d'exemple.
Ajoutez une propriété de domaine telles que le titre à la classe, et définissez sa balise d' Est le nom de l'élément .
ajoutez d'autres propriétés de domaine.
Ajoutez une autre classe de domaine d'élément de liste pour chaque liste à afficher.
Pour combiner plusieurs types d'élément dans la liste, créez des classes qui héritent de la classe de liste.Faites l'extrait du classe de liste en définissant son modificateur d'héritage.
Par exemple, si vous souhaitez que la musique classique à trier le compositeur au lieu de l'artiste, vous pouvez créer deux sous-classes de chanson, de ClassicalSong et de NonClassicalSong.
créez la forme de compartiment.Glisser-déplacer de l'outil de forme de compartiment sur le diagramme de définition de langage spécifique à un domaine.
Ajoutez un élément décoratif de texte et définissez son nom.
ajoutez un compartiment et définissez son nom.
Pour permettre à l'utilisateur de masquer les compartiments de liste, cliquez avec le bouton droit sur la classe de forme de compartiment, pointez sur Ajouter, puis cliquez sur Développer/décorateur de réduction.Dans la fenêtre Propriétés, définissez la position de décorateur.
Cliquez sur l'outil de Mappage d'élément de diagramme , cliquez sur la classe de domaine de conteneur, puis cliquez sur la forme de compartiment.
Sélectionnez le lien de mappage d'élément de diagramme entre la classe de domaine et la forme.dans la fenêtre de Détails DÉSOLÉ :
cliquez sur l'onglet d' Éléments décoratifs .Cliquez sur le nom du décorateur puis sélectionnez l'élément approprié sous Propriétés d'affichage.Assurez -vous qu'une coche apparaît en regard de le nom de décorateur.
cliquez sur l'onglet de Mappage de compartiment .
cliquez sur le nom du compartiment.
Sous Chemin d'accès affiché de collections items, naviguez jusqu'à la classe d'éléments de liste (chanson).Cliquez sur la flèche de déroulement pour utiliser l'outil de navigateur.
Sous Propriétés d'affichage, sélectionnez la propriété qui doit être affichée dans la liste.Dans l'exemple, il s'agit de titre.
[!REMARQUE]
En utilisant des champs du chemin d'accès des champs dans de décorateur de mappage et de compartiment cartes, vous pouvez faire plus de relations complexes entre les classes de domaine et la forme de compartiment.
Pour définir un outil pour créer une forme
faites un élément de boîte à outils pour créer des éléments de la classe de domaine.
Dans Explorateur DÉSOLÉ, développez le nœud d' Éditeur et tous ses sous-nœuds.
Cliquez avec le bouton droit sur le nœud sous Onglets de la boîte à outils portant le même nom que votre DÉSOLÉ, par exemple MusicLibrary.cliquez sur ajoutez l'outil d'élément.
[!REMARQUE]
Si vous cliquez avec le bouton droit sur le nœud d' Outils , vous ne verrez pas ajoutez l'outil d'élément.Au lieu de cela, cliquez sur le nœud immédiatement supérieur.
dans la fenêtre Propriétés avec le nouvel outil d'élément sélectionné, définissez Classe à la classe de domaine que vous avez récemment ajoutée.
définissez légende et info-bulle.
Définissez icône de boîte à outils à une icône qui s'affichera dans la boîte à outils.Vous pouvez définir à une nouvelle icône ou une icône déjà utilisée pour un autre outil.
Pour créer une nouvelle icône, ouvrez DÉSOLÉ \Resources dans Explorateur de solutions.Copiez et collez l'un des fichiers existants de l'outil .BMP d'élément.Renommez la copie collée, puis double-cliquez sur pour la modifier.
Revenez au schéma de définition DÉSOLÉ, sélectionnez l'outil, et dans cliquez sur [...] de fenêtre Propriétés de icône de boîte à outils.Dans la boîte de dialogue de Sélectionnez l'image bitmap , sélectionnez votre fichier BMP dans le menu déroulant.
pour tester une forme de compartiment
Cliquez sur la transformation tous les modèles dans la barre d'outils de l'explorateur de solutions, pour générer le code concepteur de langage spécifique à un domaine.
Générez et exécutez le langage spécifique à un domaine. Appuyez sur F5 ou CTRL+F5 pour exécuter une nouvelle instance de Visual Studio en mode expérimental.Dans l'instance expérimentale de Visual Studio, ouvrez ou créez un fichier qui porte l'extension de nom de fichier de votre DÉSOLÉ.
Vérifiez que l'outil apparaît dans la boîte à outils.
faites glisser l'outil sur le diagramme de modèle.une forme est créée.
Vérifiez que le nom de l'élément s'affiche et est défini automatiquement à une valeur par défaut.
Cliquez avec le bouton droit sur l'en-tête de la nouvelle forme, puis cliquez sur ajouter votre élément de liste. Dans l'exemple, la commande s'ajoutent la chanson.
Vérifiez qu'un élément figure dans la liste et qu'il a un nouveau nom.
Cliquez sur l'un des éléments de liste, puis examinez la fenêtre Propriétés.Vous devez voir les propriétés des éléments de liste.
ouvrez l'explorateur de langage.Vérifiez que vous pouvez visualiser les nœuds conteneurs aux nœuds d'élément de liste dans.
Après avoir testé d'abord une forme de compartiment, vous pouvez régler certaines de ses propriétés et ajouter encore plus de fonctionnalités avancées.Pour plus d'informations, consultez Personnalisation et extension d'un langage spécifique à un domaine.
afficher un lien de référence dans un compartiment
Généralement, un élément que vous affichez dans un compartiment est un enfant de l'élément représenté par la forme de compartiment.Mais parfois, vous préférez afficher un élément qui lui est associé avec une relation de référence.
Par exemple, nous pouvons ajouter un deuxième compartiment à AlbumShape qui affiche une liste de artistes liés à l'album.
Dans ce cas, le compartiment doit afficher le lien, au lieu de l'élément référencé.C'est parce que lorsque l'utilisateur sélectionne l'élément dans le compartiment et les utilisations SUPPRIMENT, vous souhaitez que le lien à supprimer, pas l'élément référencé.
Néanmoins, vous pouvez afficher le nom de l'élément référencé dans le compartiment.
La procédure suivante suppose que vous avez déjà créé la classe de domaine, la relation de référence, la forme de compartiment, et le mappage d'élément de diagramme, comme décrit précédemment dans cette section.
pour afficher une référence le liez dans un compartiment
Ajoutez un compartiment de la forme de compartiment.Sur le diagramme de définition DÉSOLÉ, cliquez avec le bouton droit sur la classe de forme de compartiment, pointez sur Ajouter, puis cliquez sur compartiment.
Définissez Chemin d'accès affiché de collections items pour naviguer jusqu ' à le lien, plutôt qu'à l'élément cible.Cliquez sur le menu déroulant et utilisez l'arborescence pour sélectionner la relation de référence au lieu de sa cible.dans l'exemple, la relation est ArtistAppearedOnAlbums.
Définissez chemin d'accès à la propriété d'affichage pour naviguer à l'aide de le lien vers l'élément cible.Dans l'exemple, il s'agit artiste.
Définissez Propriétés d'affichage de la propriété appropriée de l'élément cible, par exemple nom.
Transformer tous les modèles, générez et exécutez le code DÉSOLÉ, et ouvrez un modèle de test.
Dans le diagramme de modèle, créez des classes pertinentes de la forme, définissez leurs noms, et créer un lien entre eux.Dans la forme du compartiment, les noms d'éléments liés doivent s'afficher.
Sélectionnez le lien ou l'élément dans la forme du compartiment.Le lien et l'élément doivent disparaître.
Définir se déplace à la limite d'une autre forme
un port est une forme qui est située sur la limite d'une autre forme.
Les ports peuvent également être utilisés pour fournir un point de connexion fixe sur une autre forme, à laquelle l'utilisateur peut dessiner des connecteurs.dans ce cas, vous pouvez rendre la forme de port transparente.
Pour voir un exemple qui utilise des ports, sélectionnez le modèle de Diagramme de composant UML lorsque vous créez une solution DÉSOLÉ.Cet exemple montre les questions principales que vous pouvez prendre en compte lorsque vous définissez des ports :
Il existe une classe de domaine qui représente le conteneur des ports, Component.
Il existe une classe de domaine qui représente des ports.Dans l'exemple, il s'agit ComponentPort.
Il existe une relation d'incorporation de la classe de domaine de conteneur à la classe de domaine de port.Pour plus d'informations, consultez définir des classes de domaine.
Si vous souhaitez différents types de port à combiner sur le même conteneur, vous pouvez créer des sous-classes de la classe de domaine de port.dans l'exemple, InPort et OutPort héritent d' ComponentPort.
La classe de domaine de conteneur peut être mappée à tout type de forme.Dans l'exemple, il s'agit ComponentShape.Pour plus d'informations, consultez définir des formes.
les classes de domaine de port sont mappées pour déplacer des formes.Vous pouvez soit mapper les classes dérivées de pour séparer les classes de forme de port, ou mappez la classe de base à une classe de forme de port.
À d'autres cas, les formes de port se comportent comme décrit dans définir des formes.
Pour plus d'informations, consultez Propriétés des formes de port.
Définissant un DÉSOLÉ qui a Couloirs
Couloirs sont une partition horizontale ou verticale d'un diagramme.Chaque couloir correspond à un élément de modèle.Votre définition de langage spécifique à un domaine requiert une classe de domaine pour les éléments de couloir.
La meilleure façon de créer un DÉSOLÉ avec des couloirs est de créer une nouvelle solution DÉSOLÉ et choisir le modèle de solution de flux de travail.Dans la définition DÉSOLÉ, la classe d'acteur est la classe de domaine mappée au couloir.Renommez cela et les autres classes pour l'adapter à votre projet.
Pour ajouter une classe qui sera affichée comme une forme à l'intérieur d'un couloir, créez une relation d'incorporation entre la classe de couloir et votre nouvelle classe.Les utilisateurs pourront aux éléments de glisser-déplacer d'un couloir à un autre, mais chaque élément sera toujours à l'intérieur d'un couloir particulier.Dans le modèle de solution de flux de tâche, l'élément de flux est un enfant de la classe de couloir.
Pour ajouter une classe qui sera affichée sous la forme indépendamment des couloirs, créez une relation d'incorporation entre la classe racine et votre nouvelle classe.Les utilisateurs peuvent placer ces formes sur le diagramme, notamment au delà de les limites de couloirs et externe des couloirs.Dans le modèle de solution de flux de travail, le commentaire est un enfant de la classe racine.
Pour plus d'informations, consultez Propriétés des couloirs.
Types de propriété d'addition
énumérations et littéraux de domaine
une énumération de domaine est un type avec plusieurs valeurs littérales.
Pour ajouter une énumération de domaine, cliquez avec le bouton droit sur la racine du modèle dans Explorateur DÉSOLÉ puis cliquez sur ajoutez la nouvelle énumération de domaine.L'élément s'affichera dans Explorateur DÉSOLÉ sous le nœud de types de domaine .cet élément n'apparaît pas sur le diagramme.
Pour ajouter des littéraux d'énumération à l'énumération de domaine, cliquez avec le bouton droit sur l'énumération de domaine dans Explorateur DÉSOLÉ puis cliquez sur ajoutez le nouveau littéral d'énumération.
Par défaut, une propriété qui possède un type énumération ne peut être définie uniquement à une valeur de l'énumération à la fois.Si vous souhaitez que les utilisateurs et les programmeurs à pouvoir définir une combinaison des valeurs (« champ de bits » - définissez la propriété d' IsFlags de l'énumération.
types externes
Lorsque vous définissez le type d'une propriété de domaine, si le type souhaité dans la liste déroulante de Type , vous pouvez ajouter un type externe.Par exemple, vous pouvez ajouter le type d' System.Drawing.Color à la liste.
Pour ajouter un type, cliquez avec le bouton droit sur la racine du modèle dans l'explorateur DÉSOLÉ, puis cliquez sur ajoutez le nouveau type externe.Dans la fenêtre Propriétés, affectez le nom à Color et l'espace de noms à System.Drawing.Ce type apparaît maintenant dans l'explorateur DÉSOLÉ sous types de domaine.Vous pouvez la choisir chaque fois que vous définissez le type d'une propriété de domaine.
Personnaliser le DÉSOLÉ
À l'aide de les techniques décrites dans cette rubrique, vous pouvez rapidement créer un DÉSOLÉ avec une notation schématique, un formulaire lisible XML, et les outils de base requis pour générer du code et d'autres artefacts.
Il existe deux méthodes d'étendre la définition DÉSOLÉ :
Affiner le domaine (en utilisant des fonctionnalités plus de la définition de langage spécifique à un domaine.Par exemple, vous pouvez effectuer un seul outil de connecteur qui peut créer plusieurs types de connecteur, et vous pouvez contrôler les règles dans lesquels la suppression d'un élément supprime également des éléments associés.Ces techniques sont principalement réalisées en définissant des valeurs dans la définition DÉSOLÉ, et certains ont des lignes de code du programme.
Pour plus d'informations, consultez Personnalisation et extension d'un langage spécifique à un domaine.
Étendre vos outils de modélisation à l'aide de le code de programme pour obtenir des effets plus avancés.Par exemple, vous pouvez créer des commandes de menu qui peuvent modifier le modèle, et vous pouvez créer des outils qui s'intègrent deux langages spécifiques à un domaine ou plus.VMSDK est conçu spécifiquement pour aider à intégrer vos extensions avec le code qui est généré de la définition de langage spécifique à un domaine.Pour plus d'informations, consultez Écriture de code pour personnaliser un langage spécifique à un domaine.
Modifier la définition DÉSOLÉ
Lorsque vous créez un élément dans une définition DÉSOLÉ, de nombreuses valeurs par défaut sont définies automatiquement.Après qu'ils ont été définis, vous pouvez les modifier.Cela simplifie le développement d'un langage spécifique à un domaine, tout en autorisant toujours des personnalisations puissantes.
Par exemple, lorsque vous mappez une forme à un élément, le chemin d'accès à l'élément parent du mappage est automatiquement défini en fonction de la relation d'incorporation de la classe de domaine.Toutefois, si vous changez la relation d'incorporation, le chemin d'accès à l'élément parent n'est pas modifié automatiquement.
Vous devez donc savoir que lorsque vous modifiez des relations dans votre définition DÉSOLÉ, il ne soit pas rare que les erreurs soient stockées soit lorsque vous enregistrez la définition, ou lorsque vous transformez tous les modèles.Il est facile à résoudre la plupart de ces erreurs.Double-cliquez sur le rapport d'erreurs pour visualiser l'emplacement de l'erreur.
Voir aussi Comment : modifier l'espace de nom d'un langage spécifique à un domaine.
Dépannage
Le tableau suivant répertorie certains des problèmes courants qui sont produits lorsque vous concevez un langage spécifique à un domaine, avec des suggestions pour la solution.plus de conseil est disponible sur Visualization Tools Extensibililty Forum.
Problème |
Suggestion |
---|---|
Les modifications que j'ai apportées dans le fichier de définition de langage spécifique à un domaine n'ont aucun effet. |
Cliquez sur Transformer tous les modèles dans la barre d'outils au-dessus de l'explorateur de solutions, puis régénérez la solution. |
Les formes affichent le nom d'un élément décoratif au lieu de la valeur de propriété. |
installez le mappage de décorateur.Sur le diagramme de définition DÉSOLÉ, cliquez sur le mappage d'élément de diagramme, qui est la ligne gris entre la classe de domaine et la classe de forme. ouvrez la fenêtre de Détails DÉSOLÉ .Si vous ne pouvez pas lui consultez, dans le menu Affichage, pointez sur Autres fenêtres, puis cliquez sur Détails DÉSOLÉ. cliquez sur l'onglet de Mappage de décorateur .Sélectionnez le nom de décorateur.Assurez -vous que la case à cocher située en regard de celle-ci est activée.sous Propriétés d'affichage, sélectionnez le nom d'une propriété de domaine. Pour plus d'informations, consultez formes sur le diagramme. |
Dans l'explorateur DÉSOLÉ, je ne peux pas ajouter à une collection.Par exemple, lorsque je clique avec le bouton droit sur des outils, il n'y avait pas de commande « add outil » dans le menu. Dans l'explorateur pour mon DÉSOLÉ, je ne peux donc ajouter un élément à une liste. |
Cliquez avec le bouton droit sur l'élément au-dessus de le nœud que vous essayez.Lorsque vous souhaitez ajouter à une liste, la commande d'ajouter n'est pas dans le nœud de liste, mais dans son propriétaire. |
J'ai créé une classe de domaine, mais je ne peux pas créer d'instances dans l'explorateur de langage. |
Chaque classe de domaine à l'exception de la racine doit être la cible d'une relation d'incorporation. |
Dans l'explorateur pour mon DÉSOLÉ, les éléments sont affichés uniquement avec leurs noms de types. |
Dans la définition DÉSOLÉ, sélectionnez une propriété de champ de la classe et dans la fenêtre Propriétés, affectez Est le nom de l'élément valeur true. |
Mon DÉSOLÉ s'ouvre toujours dans l'éditeur XML. |
Cela peut se produire en raison d'une erreur lorsque le fichier a été lu.Toutefois, même après avoir résoudre cette erreur, vous devez explicitement réinitialiser l'éditeur pour être votre concepteur de langage spécifique à un domaine. Cliquez avec le bouton droit sur l'élément de projet, cliquez sur Ouvrir avec et sélectionnez YourLanguageConcepteur (valeur par défaut). |
La boîte à outils de mon DÉSOLÉ n'apparaît pas lorsque j'aie changé les noms de l'assembly. |
Inspectez et mettre à jour DslPackage\GeneratedCode\Package.tt pour plus d'informations, consultez le Comment : modifier l'espace de nom d'un langage spécifique à un domaine. |
La boîte à outils de mon DÉSOLÉ n'apparaît pas, mais je n'ai pas changé le nom de l'assembly. Ou, un message apparaît enregistrant le manque de charger une extension. |
Réinitialisez l'instance expérimentale de, et régénérez votre solution.
|
Voir aussi
Tâches
Création d'un langage spécifique à un domaine basé sur Windows Forms