Partager via


Navigation et mise à jour des modèles de couche dans le code de programme

Cette rubrique décrit les éléments et les relations au sein des modèles de couche, que vous pouvez parcourir et mettre à jour dans Visual Studio Ultimate à l'aide de code de programme.

Pour plus d'informations sur les diagrammes de couche du point de vue de l'utilisateur, consultez Diagrammes de couche : référence et Diagrammes de couche : instructions.

Le modèle Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer décrit dans cette rubrique rappelle le modèle plus général Microsoft.VisualStudio.GraphModel. Si vous écrivez une commande de menu ou une extension de mouvement, utilisez le modèle Layer. Si vous écrivez une extension de validation de couche, il est plus simple d'utiliser GraphModel.

Transactions

Quand il s'agit de mettre à jour un modèle, enserrez les modifications dans ILinkedUndoTransaction. Cela permet de regrouper les modifications dans une même transaction. En cas d'échec d'une des modifications, l'ensemble de la transaction est annulée. Si l'utilisateur annule une modification, toutes les modifications sont annulées.

Pour plus d'informations, consultez Comment : lier des mises à jour de modèles à l'aide de transactions.

using (ILinkedUndoTransaction t =
        LinkedUndoContext.BeginTransaction("a name"))
{ 
    // Make changes here ....
    t.Commit(); // Don't forget this!
}

Contenance

ILayer et ILayerModel peuvent tous les deux contenir ILayers.

Les couches (ILayer) et le modèle de couche (ILayerModel) peuvent contenir des commentaires et des couches.

Une couche (ILayer) peut être contenue dans un modèle de couche (ILayerModel) ou imbriquée dans une autre couche ILayer.

Pour créer un commentaire ou une couche, utilisez les méthodes de création dans le conteneur approprié.

Liens de dépendance

Un lien de dépendance est représenté par un objet. Il peut être parcouru dans chaque direction :

Un ILayerDependencyLink connecte deux ILayers.

Pour créer un lien de dépendance, appelez source.CreateDependencyLink(target).

Commentaires

Les commentaires peuvent être contenus à l'intérieur de couches ou du modèle de couche, mais aussi être liés à n'importe quel élément de couche :

Les commentaires peuvent être attachés à tout élément de couche.

Un commentaire peut être lié à autant d'éléments que nécessaire, voire à aucun.

Pour obtenir les commentaires joints à un élément de couche, utilisez :

ILayerModel model = diagram.GetLayerModel(); 
IEnumerable<ILayerComment> comments = 
   model.Comments.Where(comment => 
      comment.Links.Any(link => link.Target == layerElement));

Avertissement

La propriété Comments d'une couche ILayer obtient les commentaires contenus dans cette couche ILayer.Elle n'obtient pas les commentaires qui lui sont liés.

Créez un commentaire en appelant CreateComment() dans le conteneur approprié.

Créez un lien en utilisant CreateLink() dans le commentaire.

Éléments de couche

Tous les types d'élément qui peuvent être contenus dans un modèle sont des éléments de couche :

Les ILayerElements constituent le contenu du diagramme de couche.

Propriétés

À chaque ILayerElement correspond un dictionnaire de chaînes nommé Properties. Vous pouvez utiliser ce dictionnaire pour joindre des informations arbitraires à n'importe quel élément de couche.

Références d'artefact

Une référence d'artefact (ILayerArtifactReference) représente le lien entre une couche et un élément de projet, tel qu'un fichier, une classe ou un dossier. Quand l'utilisateur crée des éléments ou en ajoute à une couche en les faisant glisser sur le diagramme de la couche à partir de l'Explorateur de solutions ou du navigateur de l'architecture, il crée des artefacts. Il est possible de lier à une couche autant de références d'artefact que nécessaire.

Chaque ligne figurant dans l'Explorateur de couches affiche une référence d'artefact. Pour plus d'informations, consultez Créer des diagrammes de couche à partir du code.

Les types et les méthodes de principal concernés par les références d'artefact sont les suivants :

ILayerArtifactReference. La propriété Categories indique le type d'artefact référencé (par exemple, une classe, un fichier exécutable ou un assembly). Categories détermine comment Identifier identifie l'artefact cible.

CreateArtifactReferenceAsync crée une référence d'artefact à partir de Project ou ProjectItem. S'agissant d'une opération asynchrone, vous fournissez généralement un rappel qui est appelé dès que la création est terminée.

Les références d'artefact de couche ne doivent pas être confondues avec les artefacts présents dans les diagrammes de cas d'usage.

Formes et diagrammes

Chaque élément figurant dans un modèle de couche est représenté par deux objets : ILayerElement et IShape. IShape représente la position et la taille de la forme dans le diagramme. Dans les modèles de couche, à chaque ILayerElement correspond un IShape, et à chaque IShape présent dans un diagramme de couche correspond un ILayerElement. IShape est aussi utilisé avec les modèles UML. Ainsi, tous les IShape ne possèdent pas nécessairement un élément de couche.

De la même façon, ILayerModel est affiché dans un IDiagram.

Dans le code d'une commande personnalisée ou d'un gestionnaire de mouvements, vous pouvez obtenir le diagramme actif et la sélection de formes active à partir de l'importation de DiagramContext :

public class ... {
[Import]
    public IDiagramContext DiagramContext { get; set; }
...
public void ... (...) 
{ IDiagram diagram = this.DiagramContext.CurrentDiagram;
  ILayerModel model = diagram.GetLayerModel();
  if (model != null)
  { foreach (ILayer layer in model.Layers) { ... }}
  foreach (IShape selected in diagram.SelectedShapes)
  { ILayerElement element = selected.GetLayerElement();
    if (element != null) ... }}

Chaque ILayerElement est présenté par un IShape.

IShape et IDiagram sont aussi utilisés pour afficher les modèles UML. Pour plus d'informations, consultez Comment : afficher un modèle sur des diagrammes.

Voir aussi

Concepts

Ajout de commandes et de mouvements aux diagrammes de couche

Ajout d'une validation d'architecture personnalisée aux diagrammes de couche

Ajout de propriétés personnalisées à un diagramme de couche

Diagrammes de couche : référence

Diagrammes de couche : instructions

Extension de modèles et de diagrammes UML