Anpassen und Erweitern einer domänenspezifischen Sprache

Visual Studio Das Modellierungs- und Visualisierungs-SDK (VMSDK) bietet mehrere Ebenen, auf denen Sie Modellierungstools definieren können:

  1. Definieren Sie eine domänenspezifische Sprache (DSL) mithilfe des DSL-Definitionsdiagramms. Sie können schnell eine DSL mit einer diagrammgesteuerten Notation, einem lesbaren XML-Formular und den grundlegenden Tools erstellen, die zum Generieren von Code und anderen Artefakten erforderlich sind. Weitere Informationen finden Sie unter How to Define a Domain-Specific Language.

  2. Optimieren Sie die DSL mithilfe erweiterter Features der DSL-Definition. Sie können z. B. zusätzliche Links erstellen, wenn der Benutzer ein Element erstellt. Diese Techniken werden größtenteils in der DSL-Definition erreicht, und einige erfordern einige Zeilen Programmcode.

  3. Erweitern Sie Ihre Modellierungstools mithilfe von Programmcode. VMSDK wurde speziell dafür entwickelt, die Integration Ihrer Erweiterungen in den Code zu vereinfachen, der aus der DSL-Definition generiert wird. Weitere Informationen finden Sie unter Schreiben von Code zum Anpassen einer Domain-Specific Sprache.

Hinweis

Wenn Sie die DSL-Definitionsdatei aktualisiert haben, vergessen Sie nicht, auf der Symbolleiste von Projektmappen-Explorer auf Alle Vorlagen transformieren zu klicken, bevor Sie Ihre Projektmappe neu erstellen.

Artikelreferenz

So erzielen Sie diesen Effekt Weitere Informationen finden Sie in diesem Thema.
Ermöglicht es dem Benutzer, die Farb- und Stileigenschaften einer Form festzulegen. Klicken Sie mit der rechten Maustaste auf die Form oder Connectorklasse, zeigen Sie auf Verfügbar gemacht hinzufügen, und klicken Sie auf ein Element.
Verschiedene Klassen von Modellelementen ähneln sich im Diagramm und teilen Eigenschaften wie anfängliche Höhe und Breite, Farbe und QuickInfos. Verwenden Sie vererbung zwischen Formen oder Konnektorklassen. Zuordnungen zwischen abgeleiteten Formen und abgeleiteten Domänenklassen erben die Zuordnungsdetails der eltern.

Oder ordnen Sie derselben Shape-Klasse verschiedene Domänenklassen zu.
Eine Klasse des Modellelements wird in verschiedenen Formenkontexten angezeigt. Ordnen Sie derselben Domänenklasse mehrere Formklassen zu. Wenn Sie die Projektmappe erstellen, folgen Sie dem Fehlerbericht, und geben Sie den angeforderten Code an, um zu entscheiden, welche Form verwendet werden soll.
Die Formfarbe oder andere Features, z. B. Schriftart, geben den aktuellen Zustand an. Weitere Informationen finden Sie unter Aktualisieren von Formen und Konnektoren, um das Modell widerzuspiegeln.

Erstellen Sie eine Regel, die die verfügbar gemachten Eigenschaften aktualisiert. Weitere Informationen finden Sie unter Regeln zum Propagieren von Änderungen innerhalb des Modells.

Alternativ können Sie OnAssociatedPropertyChanged() verwenden, um nicht verfügbar gemachte Features wie Linkpfeile oder Schriftarten zu aktualisieren.
Symbol für Formänderungen, um den Zustand anzugeben. Legen Sie die Sichtbarkeit der Decoratorzuordnung im Fenster DSL-Details fest. Suchen Sie mehrere Bilddekoratoren an derselben Position. Weitere Informationen finden Sie unter Aktualisieren von Formen und Konnektoren, um das Modell widerzuspiegeln.

Oder überschreiben Sie ImageField.GetDisplayImage() . Siehe Beispiel in ImageField .
Festlegen eines Hintergrundbilds für eine beliebige Form Überschreiben Sie InitializeInstanceResources(), um ein verankertes ImageField hinzuzufügen.
Schachteln von Formen in beliebige Tiefe Richten Sie eine rekursive Einbettungsstruktur ein. Definieren Sie BoundsRules, um die Formen zu enthalten.
Fügen Sie Connectors an festen Punkten an der Grenze eines Elements an. Definieren Sie eingebettete Terminalelemente, die durch kleine Ports im Diagramm dargestellt werden. Verwenden Sie BoundsRules, um die ports zu korrigieren. Weitere Informationen finden Sie im Circuit Diagram-Beispiel unter Visualisierungs- und Modellierungs-SDK.
Das Textfeld zeigt einen Wert an, der von anderen Werten abgeleitet wurde. Ordnen Sie das Textdekorator einer berechneten oder benutzerdefinierten Storage Domäneneigenschaft zu. Weitere Informationen finden Sie unter Calculated and Custom Storage Properties.
Propagieren von Änderungen zwischen Modellelementen oder Formen Weitere Informationen finden Sie unter Validierung in einer Domain-Specific Sprache.
Sie können Änderungen an Ressourcen wie anderen Visual Studio Erweiterungen außerhalb des Speichers weiterverbreiten. Weitere Informationen finden Sie unter Weitergeben von Änderungen außerhalb des Modells durch Ereignishandler.
Im Eigenschaftenfenster werden Die Eigenschaften eines verknüpften Elements angezeigt. Richten Sie die Eigenschaftenweiterleitung ein. Weitere Informationen finden Sie unter Anpassen des Eigenschaftenfensters.
Eigenschaftenkategorien Das Eigenschaftenfenster ist in Abschnitte unterteilt, die als Kategorien bezeichnet werden. Legen Sie die Kategorie Ihrer Domäneneigenschaften fest. Eigenschaften mit dem gleichen Kategorienamen werden im gleichen Abschnitt angezeigt. Sie können auch die Kategorie einer Beziehungsrolle festlegen.
Steuern des Benutzerzugriffs auf Domäneneigenschaften Legen Sie Is Browsable false fest, um zu verhindern, dass eine Domäneneigenschaft zur Laufzeit im Eigenschaftenfenster angezeigt wird. Sie können es weiterhin Textdekoratoren zuordnen.

Die Schreibgeschützte Benutzeroberfläche verhindert, dass Benutzer eine Domäneneigenschaft ändern.

Der Programmzugriff auf die Domäneneigenschaft ist nicht betroffen.
Ändern Sie den Namen, das Symbol und die Sichtbarkeit von Knoten im Modell-Explorer Ihrer DSL. Weitere Informationen finden Sie unter Anpassen des Modell-Explorers.
Aktivieren von Kopieren, Ausschneiden und Einfügen Legen Sie die Eigenschaft Copy Paste aktivieren des Knotens Editor im DSL-Explorer fest.
Kopieren Sie Verweislinks und deren Ziele, wenn ein Element kopiert wird. Kopieren Sie beispielsweise Kommentare, die an ein Element angefügt sind. Legen Sie die Eigenschaft Propagates Copy der Quellrolle fest (dargestellt durch die Zeile an einer Seite der Domänenbeziehung im DSL-Definitionsdiagramm).

Schreiben Sie Code, um ProcessOnCopy zu überschreiben, um komplexere Effekte zu erzielen.

Weitere Informationen finden Sie unter Anpassen des Kopierverhaltens.
Löschen, erneutes Auffüllen oder erneutes Verknüpfen verwandter Elemente, wenn ein Element gelöscht wird. Legen Sie den Wert "Propagates Delete" einer Beziehungsrolle fest. Um komplexere Effekte zu erzielen, überschreiben ShouldVisitRelationship Sie die -Methode und ShouldVisitRolePlayer die -Methode in der MyDslDeleteClosure -Klasse, die in DomainModel.cs definiert ist.
Beibehalten des Formlayouts und der Darstellung beim Kopieren und Ziehen von Drag & Drop. Fügen Sie die Formen und Konnektoren zum kopierten ElementGroupPrototype hinzu. Die am einfachsten zu überschreibende Methode ist ElementOperations.CreateElementGroupPrototype()

Weitere Informationen finden Sie unter Anpassen des Kopierverhaltens.
Fügen Sie Formen an einer ausgewählten Stelle ein, beispielsweise an der aktuelle Cursorposition. Überschreiben ClipboardCommandSet.ProcessOnCopy() Sie , um die standortspezifische Version von zu verwenden. Weitere Informationen finden Sie unter Anpassen des ElementOperations.Merge(). Kopierverhaltens.
Erstellen zusätzlicher Links beim Einfügen ClipboardCommandSet.ProcessOnPasteCommand() überschreiben
Aktivieren von Drag & Drop aus diesem Diagramm, anderen DSLs und Windows Elementen See How to: Add a Drag-and-Drop Handler
Lassen Sie zu, dass eine Form oder ein Tool auf eine untergeordnete Form gezogen wird, z. B. einen Port, als ob sie auf das übergeordnete Element gezogen worden wäre. Definieren Sie eine Element Merge Directive für die Zielobjektklasse, um das gelöschte Objekt an das übergeordnete Objekt weiterzuleiten. Weitere Informationen finden Sie unter Anpassen der Elementerstellung und -verschiebung.
Lassen Sie zu, dass eine Form oder ein Tool auf eine Form gezogen wird und zusätzliche Verknüpfungen oder Objekte erstellt werden. Beispielsweise, um zuzulassen, dass ein Kommentar auf einem Element abgelegt wird, mit dem er verknüpft werden soll. Definieren Sie eine ElementZusammenführungsdirektive für die Zieldomänenklasse, und definieren Sie die zu generierenden Links. In komplexen Fällen können Sie benutzerdefinierten Code hinzufügen. Weitere Informationen finden Sie unter Anpassen der Elementerstellung und -verschiebung.
Erstellen Sie eine Gruppe von Elementen mit einem Tool. Beispielsweise eine Komponente mit einem festen Satz von Ports. Überschreiben Sie die Toolboxinitialisierungsmethode in ToolboxHelper.cs. Erstellen Sie einen Elementgruppenprototyp (EGP), der die Elemente und deren Beziehungslinks enthält. Weitere Informationen finden Sie unter Anpassen von Tools und der Toolbox.

Schließen Sie entweder die Prinzipal- und Portformen in den EGP ein, oder definieren Sie BoundsRules, um die Portformen zu positionieren, wenn der EGP instanziiert wird.
Verwenden Sie ein Verbindungstool, um mehrere Beziehungstypen zu instanziieren. Fügen Sie dem Verbindungs-Generator, der vom Tool aufgerufen wird, Link-Verbinden-Direktiven (HYPERLINK) hinzu. Die LCDs bestimmen den Typ der Beziehung aus den Typen der beiden Elemente. Damit dies von den Zustände der Elemente abhängig ist, können Sie benutzerdefinierten Code hinzufügen. Weitere Informationen finden Sie unter Anpassen von Tools und der Toolbox.
Sticky Tools : Der Benutzer kann auf ein beliebiges Tool doppelklicken, um viele Formen oder Konnektoren nacheinander zu erstellen. Wählen Sie im DSL-Explorer den Editor Knoten aus. Legen Sie im Eigenschaftenfenster auf Verwendet stickige Toolboxelemente fest.
Definieren von Menübefehlen Siehe How to: Modify a Standard Menu Command (How to: Ändern eines Standardmenübefehls)
Einschränken des Modells mit Validierungsregeln Weitere Informationen finden Sie unter Validation in a Domain-Specific Language (Überprüfung in einer Domain-Specific Sprache).
Generieren sie Code, Konfigurationsdateien oder Dokumente aus einer DSL. Generieren von Code für eine domänenspezifische Sprache
Passen Sie an, wie Modelle in einer Datei gespeichert werden. Weitere Informationen finden Sie unter Anpassen von Storage und XML-Serialisierung.
Speichern Sie Modelle in Datenbanken oder anderen Medien. Außerkraftsetzen von YourLanguage DocData

Weitere Informationen finden Sie unter Anpassen von Storage und XML-Serialisierung.
Integrieren Sie mehrere DSLs, damit sie als Teil einer Anwendung funktionieren. Weitere Informationen finden Sie unter Integrieren von Modellen mit Visual Studio Modelbus.
Lassen Sie zu, dass Ihre DSL von Drittanbietern erweitert wird, und steuern Sie die Erweiterung. Erweitern von DSL mittels MEF

Gemeinsame Nutzung von Klassen durch DSLs über eine DSL-Bibliothek

Definieren einer Sperrrichtlinie zum Erstellen von schreibgeschützten Segmenten

Siehe auch

Hinweis

Die Komponente Textvorlagentransformation wird automatisch als Teil der Workload Visual Studio-Erweiterungsentwicklung installiert. Sie können die Installation auch über die Registerkarte Einzelne Komponenten des Visual Studio-Installers unter der Kategorie SDKs, Bibliotheken und Frameworks durchführen. Installieren Sie die Komponente Modellierungs-SDK auf der Registerkarte Einzelne Komponenten.