Freigeben über


Navigieren in und Aktualisieren von Ebenenmodellen im Programmcode

In diesem Thema werden die Elemente und Beziehungen in Ebenenmodellen beschrieben, die Sie in Visual Studio Ultimate mithilfe von Programmcode durchsuchen und aktualisieren können.

Weitere Informationen zu Ebenendiagrammen aus Sicht des Benutzers finden Sie unter Ebenendiagramme: Referenz und Ebenendiagramme: Richtlinien.

Das in diesem Thema beschriebene Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer-Modell ist eine Fassade eines allgemeineren Microsoft.VisualStudio.GraphModel-Modells. Wenn Sie eine Menübefehl- oder Gestenerweiterung erstellen, verwenden Sie das Layer-Modell. Wenn Sie eine Ebenenvalidierungserweiterung erstellen, ist es einfacher, das GraphModel zu verwenden.

Transaktionen

Erwägen Sie beim Aktualisieren eines Modells die Änderungen in eine ILinkedUndoTransaction einzuschließen. Auf diese Weise werden die Änderungen zu einer Transaktion gruppiert. Wenn eine der Änderungen fehlschlägt, wird die gesamte Transaktion zurückgesetzt. Wenn der Benutzer eine Änderung rückgängig macht, werden alle Änderungen zusammen rückgängig gemacht.

Weitere Informationen finden Sie unter Gewusst wie: Verknüpfen von Modellaktualisierungen mithilfe von Transaktionen.

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

Kapselung

ILayer und ILayerModel können beide ILayer enthalten.

Ebenen (ILayer) und das Ebenenmodell (ILayerModel) können Kommentare und Ebenen enthalten.

Eine Ebene (ILayer) kann in einem Ebenenmodell (ILayerModel) enthalten sein oder in einer anderen ILayer geschachtelt werden.

Verwenden Sie die Erstellungsmethoden für den entsprechenden Container, um einen Kommentar oder eine Ebene zu erstellen.

Ein Abhängigkeitslink wird durch ein Objekt dargestellt. Er kann in beide Richtungen navigiert werden:

Ein ILayerDependencyLink verbindet zwei ILayer.

Rufen Sie source.CreateDependencyLink(target) auf, um einen Abhängigkeitslink zu erstellen.

Kommentare

Kommentare können auf Ebenen oder im Ebenenmodell enthalten sein. Zudem können sie mit beliebigen anderen Ebenenelementen verknüpft werden:

Kommentare können jedem Ebenenelement hinzugefügt werden.

Ein Kommentar kann mit einer beliebigen Anzahl von Elementen sowie auch mit keinem Element verknüpft werden.

Verwenden Sie Folgendes, um die Kommentare abzurufen, die einem Ebenenelement zugeordnet sind:

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

Warnung

Die Comments-Eigenschaft einer ILayer ruft die Kommentare ab, die in ILayer enthalten sind.Es werden nicht die mit ihr verknüpften Kommentare abgerufen.

Erstellen Sie einen Kommentar, indem Sie CreateComment() im entsprechenden Container aufrufen.

Erstellen Sie einen Link, indem Sie CreateLink() auf den Kommentar anwenden.

Ebenenelemente

Alle Elementtypen, die in einem Modell enthalten sein können, sind Ebenenelemente:

Ebenendiagramme enthalten ILayerElements.

Eigenschaften

Jedes ILayerElement verfügt über ein Zeichenfolgenwörterbuch namens Properties. Über dieses Wörterbuch können Sie willkürliche Informationen an ein beliebiges Ebenenelement anfügen.

Artefaktverweise

Ein Artefaktverweis (ILayerArtifactReference) stellt den Link zwischen einer Ebene und einem Projektelement dar, z. B. eine Datei, eine Klasse oder ein Ordner. Wenn Benutzer Elemente auf einer Ebene erstellen oder zu einer Ebene hinzufügen, indem sie die Elemente aus dem Projektmappen-Explorer oder Architektur-Explorer auf das Ebenendiagramm ziehen, erstellen sie dabei Artefakte. Mit einer Ebene kann eine beliebige Anzahl von Artefaktverweisen verknüpft werden.

Jede Zeile im Ebenen-Explorer zeigt einen Artefaktverweis an. Weitere Informationen finden Sie unter Erstellen von Ebenendiagrammen aus Code.

Folgende hauptsächliche Typen und Methoden sind von Artefaktverweisen betroffen:

ILayerArtifactReference. Die Eigenschaft "Kategorien" gibt an, welche Art von Artefakt referenziert wird, z. B. Klasse, ausführbare Datei oder Assembly. Die Kategorien bestimmen, wie der Bezeichner das Zielartefakt identifiziert.

CreateArtifactReferenceAsync erstellt einen Artefaktverweis über ein Project oder ProjectItem. Das ist ein asynchroner Vorgang. Daher stellen Sie normalerweise einen Rückruf bereit, der nach Abschluss der Erstellung aufgerufen wird.

Ebenenartefaktverweise dürfen nicht mit Artefakten in Anwendungsfalldiagrammen verwechselt werden.

Formen und Diagramme

Es werden zwei Objekte verwendet, um die einzelnen Elemente in einem Ebenenmodell darzustellen: ILayerElement und IShape. IShape stellt Position und Größe der Form auf dem Diagramm dar. In Ebenenmodellen verfügt jedes ILayerElement über ein IShape, und jedes IShape in einem Ebenendiagramm besitzt ein ILayerElement. IShape wird auch für UML-Modelle verwendet. Daher verfügt nicht jedes IShape über ein Ebenenelement.

Auf dieselbe Weise wird ILayerModel für ein IDiagram angezeigt.

Im Code eines benutzerdefinierten Befehl- oder Gestenhandlers können Sie das aktuelle Diagramm und die aktuelle Formenauswahl aus dem DiagramContext-Import abrufen:

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) ... }}

Jedes ILayerElement wird durch eine IShape angegeben.

IShape und IDiagram werden auch zum Anzeigen von UML-Modellen verwendet. Weitere Informationen finden Sie unter Gewusst wie: Anzeigen eines Modells in Diagrammen.

Siehe auch

Konzepte

Hinzufügen von Befehlen und Bewegungen zu Ebenendiagrammen

Hinzufügen einer benutzerdefinierten Architekturüberprüfung zu Ebenendiagrammen

Hinzufügen von benutzerdefinierten Eigenschaften zu einem Ebenendiagramm

Ebenendiagramme: Referenz

Ebenendiagramme: Richtlinien

Erweitern von UML-Modellen und Diagrammen