Navigieren in und Aktualisieren von Ebenenmodellen im Programmcode
In diesem Thema werden die Elemente und Beziehungen in Ebenenmodellen, die Sie in und Visual Studio Ultimate aktualisieren können navigieren, indem Sie Programmcode verwenden.
Weitere Informationen zu Ebenendiagrammen aus Sicht des Benutzers finden Sie unter Ebenendiagramme: Referenz und Ebenendiagramme: Richtlinien.
Das Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer Modell, das in diesem Thema beschrieben wird, ist eine Fassade auf einem allgemeinen Modell mehr Microsoft.VisualStudio.GraphModel.Wenn Sie Menübefehls- oder Gestenerweiterung schreiben, verwenden Sie das Layer Modell.Wenn Sie überlagern Sie Validierungserweiterung schreiben, ist es einfacher, GraphModel zu verwenden.
Transaktionen
Wenn Sie ein Modell aktualisieren, erwägen Sie, die Änderungen in einem ILinkedUndoTransaction einzuschließen.Dadurch werden Ihre Änderungen in 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 geleichzeitig alle Änderungen 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
Ebenen (ILayer) und das Ebenenmodell (ILayerModel) können Kommentare und Ebenen enthalten.
Eine Ebene (ILayer) kann in einem Ebenenmodell (ILayerModel) enthalten sein oder innerhalb eines anderen ILayer geschachtelt werden.
Verwenden Sie die Erstellungsmethoden für den entsprechenden Container, um einen Kommentar oder eine Ebene zu erstellen.
Abhängigkeitslinks
Ein Abhängigkeitslink wird von einem Objekt dargestellt.Es kann in jede Richtung navigiert werden:
Rufen Sie source.CreateDependencyLink(target) auf, um einen Abhängigkeitslink zu erstellen.
Kommentare
Kommentare können in Ebenen oder dem Ebenenmodell enthalten sein und auch mit jedem Ebenenelement verknüpft werden:
Ein Kommentar kann mit einer beliebigen Anzahl von Elementen (einschließlich keinem) verknüpft werden.
Verwenden Sie folgenden Code zum Abrufen der Kommentare, die einem Ebenenelement angefügt sind:
ILayerModel model = diagram.GetLayerModel();
IEnumerable<ILayerComment> comments =
model.Comments.Where(comment =>
comment.Links.Any(link => link.Target == layerElement));
Vorsicht |
---|
Mit der Comments-Eigenschaft eines ILayer werden Kommentare abgerufen, die im ILayer enthalten sind.Damit verknüpfte Kommentare werden nicht abgerufen. |
Erstellen Sie einen Kommentar, indem Sie CreateComment() für den entsprechenden Container aufrufen.
Erstellen Sie einen Link, indem Sie CreateLink() für den Kommentar verwenden.
Ebenenelemente
Alle Elementtypen, die in einem Modell enthalten sein können, sind Ebenenelemente:
Eigenschaften
Jedes ILayerElement besitzt ein Zeichenfolgenwörterbuch mit dem Namen Properties.Sie können mithilfe dieses Wörterbuchs jedem Ebenenelement beliebige Informationen anfügen.
Artefaktverweise
Ein Artefaktverweis (ILayerArtifactReference) stellt den Link zwischen einer Ebene und einem Projektelement (z. B. Datei, Klasse oder Ordner) dar.Wenn der Benutzer eine Ebene erstellt oder hinzufügt, indem er Elemente aus dem Projektmappen-Explorer oder Architektur-Explorer in das Ebenendiagramm zieht, dann erstellt er damit 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 Prinzipaltypen und Methoden haben mit Artefaktverweisen zu tun:
ILayerArtifactReference.Die Categories-Eigenschaft gibt an, auf welchen Artefakttyp verwiesen wird, z. B. auf eine Klasse, ausführbare Datei oder Assembly.Kategorien bestimmen, wie der Bezeichner das Zielartefakt identifiziert.
CreateArtifactReferenceAsync erstellt einen Artefaktverweis aus einem Project oder ProjectItem.Dabei handelt es sich um einen asynchronen Vorgang.Folglich stellen Sie normalerweise einen Rückruf bereit, der nach Abschluss der Erstellung aufgerufen wird.
Ebenenartefaktverweise sind nicht mit Artefakten zu verwechseln, die in Diagrammen verwendet werden.
Formen und Diagramme
Zwei Objekte werden verwendet, um die einzelnen Elemente in einem Ebenenmodell darzustellen: ein ILayerElement und ein IShape.Das IShape stellt die Position und die Größe der Form im Diagramm dar.In Ebenenmodellen hat jedes ILayerElement ein IShape, und jedes IShape in einem Ebenendiagramm hat ein ILayerElement.IShape wird auch für UML-Modelle verwendet.Daher verfügt nicht jedes IShape über ein Ebenenelement.
Auf die gleiche Weise wird das ILayerModel für ein IDiagram angezeigt.
Im Code für einen benutzerdefinierten Befehls- oder Gestenhandler können Sie das aktuelle Diagramm und die aktuelle Auswahl der Formen 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) ... }}
IShape und IDiagram werden auch verwendet, um UML-Modelle anzuzeigen.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