Partager via


Personnaliser et étendre un langage spécifique à un domaine

Visual Studio Modeling and Visualisation SDK (VMSDK) offre plusieurs niveaux de définition des outils de modélisation :

  1. Définissez un langage spécifique au domaine (DSL) à l’aide du diagramme de définition DSL. Vous pouvez rapidement créer une solution DSL avec une notation schématique, un formulaire XML lisible et les outils de base nécessaires pour générer du code et d'autres artefacts. Pour plus d’informations, consultez l’article Comment définir un langage spécifique à un domaine.

  2. Affinez la solution DSL en utilisant davantage de fonctionnalités de la définition DSL. Par exemple, vous pouvez afficher des liens supplémentaires lorsque l’utilisateur crée un élément. Ces techniques sont principalement mises en œuvre dans la définition du DSL, et certaines requièrent quelques lignes de code de programme.

  3. Étendez vos outils de modélisation à l’aide du code de programme. Le Kit VMSDK a été conçu spécifiquement pour simplifier l'intégration à vos extensions avec le code généré à partir de la définition DSL. Pour plus d’informations, consultez l’article Écrire du code pour personnaliser un langage spécifique à un domaine.

Notes

Lorsque vous avez mis à jour le fichier définitions DSL, n’oubliez pas de cliquer sur Transformer tous les modèles dans la barre d’outils de l’Explorateur de solutions avant de reconstruire votre solution.

Référence de l'article

Pour atteindre cet effet Reportez-vous à cette rubrique
Autoriser l’utilisateur à définir les propriétés de couleur et de style d’une forme. Cliquez avec le bouton droit sur la forme ou la classe de connecteur, pointez sur Ajouter exposé, puis cliquez sur un élément.
Différentes classes d’élément de modèle ressemblent au diagramme, en partageant des propriétés telles que la hauteur initiale et la largeur, la couleur, les info-bulles. Utilisez l’héritage entre les formes ou les classes de connecteur. Les mappages entre les formes dérivées et les classes de domaine dérivées héritent des détails de mappage des parents.

Ou, mappez différentes classes de domaine à la même classe de forme.
Une classe d’élément de modèle est affichée par différents contextes de formes. Mappez plusieurs classes de forme à la même classe de domaine. Lorsque vous générez la solution, suivez le rapport d’erreurs et fournissez le code demandé pour décider de la forme à utiliser.
La couleur de la forme ou d'autres caractéristiques telles que la police indiquent l'état actuel. Voir l’article Mettre à jour les formes et les connecteurs pour refléter le modèle.

Créez une règle qui met à jour les propriétés exposées. Voir l’article Propagation de modifications dans le modèle par des règles.

Vous pouvez également utiliser OnAssociatedPropertyChanged() pour mettre à jour les fonctionnalités non exposées telles que les flèches de lien ou la police.
L'icône de la forme change pour indiquer l'état. Définissez la visibilité du mappage de décorateur dans la fenêtre Détails de DSL. Localisez plusieurs décorateurs d’images sur la même position. Voir l’article Mettre à jour les formes et les connecteurs pour refléter le modèle.

Ou, remplacer ImageField.GetDisplayImage(). Voir l’exemple dans ImageField.
Définir une image d’arrière-plan sur n’importe quelle forme Remplacez InitializeInstanceResources() pour ajouter un Champ ImageField ancré.
Imbriquer des formes à n’importe quelle profondeur Configurez une arborescence d’incorporation récursive. Définissez BoundsRules pour contenir les formes.
Attachez des connecteurs à des points fixes sur les limites d’un élément. Définissez les éléments de terminal incorporés, représentés par de petits ports sur le diagramme. Utilisez BoundsRules pour corriger les ports en place. Consultez l'exemple de diagramme de circuit dans Visualisation et modélisation SDK.
Le champ de texte affiche une valeur dérivée d’autres valeurs. Mappez le décorateur de texte à une propriété de domaine de stockage calculé ou personnalisé. Pour plus d’informations, consultez l’article Propriétés de stockage calculées et personnalisées.
Propager les modifications entre les éléments de modèle ou entre les formes Consultez l’article Validation dans un langage spécifique à un domaine.
Propagez les modifications apportées aux ressources telles que d’autres extensions Visual Studio en dehors du magasin. Voir l’article Les gestionnaires d'événements propagent les changements en dehors du modèle.
La fenêtre propriété affiche les propriétés d’un élément associé. Configurez le transfert de propriété. Consultez l’article Personnalisation de la fenêtre Propriétés.
Catégories de propriétés La fenêtre des propriétés est divisée en sections appelées catégories. Définissez la catégorie de vos propriétés de domaine. Les propriétés portant le même nom de catégorie s’affichent dans la même section. Vous pouvez également définir la catégorie d’un rôle Relation.
Contrôler l’accès utilisateur aux propriétés de domaine Définissez Is Browsabler sur false pour empêcher une propriété de domaine d'apparaître dans la fenêtre Propriétés au moment de l'exécution. Vous pouvez toujours le mapper aux décorateurs de texte.

Is UI Read Only empêche les utilisateurs de modifier une propriété de domaine.

L'accès du programme à la propriété du domaine n'est pas affecté.
Modifiez le nom, l’icône et la visibilité des nœuds dans l’Explorateur de modèles de votre DSL. Consultez l’article Personnalisation de l’Explorateur de modèles.
Activer la copie, couper et coller Définissez la propriété Enable Copy Paste du nœud Éditeur dans l’Explorateur DSL.
Copiez les liens de référence et leurs cibles chaque fois qu’un élément est copié. Par exemple, copiez les commentaires attachés à un élément. Définissez la propriété Propagates Copy du rôle source (représenté par la ligne d'un côté de la relation de domaine dans le diagramme de définition DSL).

Écrivez du code pour remplacer ProcessOnCopy pour obtenir des effets plus complexes.

Voir l’article Personnalisation du comportement de copie.
Supprimez, réparez ou reliez des éléments connexes lorsqu’un élément est supprimé. Définissez la valeur Propagates Delete d’un rôle de relation. Pour obtenir des effets plus complexes, remplacer les méthodes ShouldVisitRelationship et ShouldVisitRolePlayer dans la classe MyDslDeleteClosure, définis dans DomainModel.cs.
Conservez la disposition et l’apparence de la forme lors de la copie et du glisser-déplacer. Ajoutez les formes et les connecteurs à la copie ElementGroupPrototype. La méthode la plus pratique à remplacer est ElementOperations.CreateElementGroupPrototype()

Voir l’article Personnalisation du comportement de copie.
Coller des formes à un emplacement choisi, par exemple la position actuelle du curseur. Remplacez ClipboardCommandSet.ProcessOnCopy() pour utiliser la version spécifique à l’emplacement de ElementOperations.Merge(). Voir l’article Personnalisation du comportement de copie.
Créer des liens supplémentaires lors du collage Remplacer ClipboardCommandSet.ProcessOnPasteCommand()
Activer le glisser-déplacer à partir de ce diagramme, d’autres DLL et d’autres éléments Windows Voir l’article Guide pratique pour ajouter un gestionnaire glisser-déplacer
Autorisez le déplacement d’une forme ou d’un outil sur une forme enfant, telle qu’un port, comme s’il avait été glissé sur le parent. Définir une directive de fusion d'éléments sur la classe d'objets cible, afin de transmettre l'objet supprimé vers le parent. Voir l’article Personnalisation de la création et du déplacement d’éléments.
Autoriser le glissement d'une forme ou d'un outil sur une forme et la création de liens ou d'objets supplémentaires. Par exemple, pour permettre à un commentaire d’être supprimé sur un élément auquel il doit être lié. Définir une directive de fusion d'éléments sur la classe de domaine cible et définir les liens à générer. Dans des cas complexes, vous pouvez ajouter du code personnalisé. Voir l’article Personnalisation de la création et du déplacement d’éléments.
Créez un groupe d’éléments avec un outil. Par exemple, un composant avec un ensemble fixe de ports. Remplacez la méthode d’initialisation de boîte à outils dans ToolboxHelper.cs. Créez un prototype de groupe d’éléments (EGP) contenant les éléments et leurs liens de relation. Voir l’article Personnaliser les outils et la boîte à outils.

Incluez les formes de principal et de port dans le protocole EGP ou définissez BoundsRules pour positionner les formes de port lorsque le protocole EGP est instancié.
Utilisez un outil de connexion pour instancier plusieurs types de relation. Ajoutez des directives de connexion de lien (LCD) au Générateur de connexions appelé par l’outil. Les LCD déterminent le type de la relation à partir des types des deux éléments. Pour que cela dépende des états des éléments, vous pouvez ajouter du code personnalisé. Voir l’article Personnaliser les outils et la boîte à outils.
Outils Sticky : l'utilisateur peut double-cliquer sur n'importe quel outil pour créer plusieurs formes ou connecteurs à la suite. Dans l’Explorateur DSL, sélectionnez le nœud Editor. Dans la fenêtre Propriétés, définissez Uses Sticky Toolbox Items.
Définir des commandes de menu Voir l’article Guide pratique pour modifier une commande de menu standard
Limiter le modèle avec des règles de validation Voir l’article Validation dans un langage spécifique à un domaine
Générez du code, des fichiers de configuration ou des documents à partir d’un DSL. Génération de code à partir d’un langage spécifique à un domaine
Personnalisez la façon dont les modèles sont enregistrés dans un fichier. Voir l’article Personnalisation du stockage de fichiers et de la sérialisation XML.
Enregistrez des modèles dans des bases de données ou d’autres supports. Remplacer YourLanguageDocData

Voir l’article Personnalisation du stockage de fichiers et de la sérialisation XML.
Intégrez plusieurs DLL afin qu’elles fonctionnent dans le cadre d’une seule application. Voir l’article Intégration de modèles à l'aide de Visual Studio Modelbus.
Autorisez votre DSL à être étendu par des tiers et contrôlez l’extension. Extension de votre DSL à l'aide de MEF

Partage de classes entre plusieurs DSL à l'aide d'une bibliothèque DSL

Définition d'une stratégie de verrouillage pour créer des segments en lecture seule

Notes

Le composant Transformation de modèle de texte est automatiquement installé dans le cadre de la charge de travail Développement d’extensions Visual Studio. Vous pouvez aussi l’installer à partir de l’onglet Composants individuels de Visual Studio Installer, sous la catégorie SDK, bibliothèques et frameworks. Installez le composant Modeling SDK à partir de l’onglet Composants individuels.