Anpassen und Erweitern einer domänenspezifischen Sprache

Das SDK für Visualisierung und Modellierung für Visual Studio (VMSDK) stellt mehrere Ebenen bereit, auf denen Sie Modellierungstools definieren können.

  1. Definieren Sie eine domänenspezifische Sprache (DSL) mithilfe des Diagramms für DSL-Definitionen. Mit einer Diagrammdarstellung, einem lesbaren XML-Format und den grundlegenden Tools, die zum Generieren von Code und anderen Artefakten erforderlich sind, können Sie schnell eine DSL erstellen. Weitere Informationen finden Sie unter Definieren einer domänenspezifischen Sprache.

  2. Optimieren Sie die DSL, indem Sie erweiterte Features in der DSL-Definition verwenden. Sie können beispielsweise zusätzliche Links anzeigen lassen, wenn der Benutzer ein Element erstellt. Diese Verfahren setzen meistens an der DSL-Definition an. Manche erfordern auch einige Zeilen Programmcode.

  3. Erweitern Sie Ihre Modellierungstools mit 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 domänenspezifischen Sprache.

Hinweis

Wenn Sie die DSL-Definitionsdatei aktualisiert haben, denken Sie daran, 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 Artikel.
Erlauben Sie dem Benutzer, die Farb- und Stileigenschaften einer Form festzulegen. Klicken Sie mit der rechten Maustaste auf die Form- oder Verbinderklasse, zeigen Sie auf Bereitgestellte hinzufügen, und klicken Sie auf ein Element.
Verschiedene Modellelementklassen sehen im Diagramm ähnlich aus und teilen Eigenschaften wie anfängliche Höhe und Breite, Farbe, QuickInfos. Verwenden Sie die Vererbung zwischen Formen oder Verbinderklassen. Zuordnungen zwischen abgeleiteten Formen und abgeleiteten Domänenklassen erben die Zuordnungsdetails der übergeordneten Elemente.

Oder ordnen Sie derselben Formenklasse verschiedene Domänenklassen zu.
Eine Modellelementklasse wird durch verschiedene Formenkontexte angezeigt. Ordnen Sie derselben Domänenklasse mehrere Formenklassen zu. Berücksichtigen Sie beim Erstellen der Projektmappe den Fehlerbericht, und geben Sie den angeforderten Code an, um zu entscheiden, welche Form verwendet werden soll.
Formfarbe oder andere Features wie Schriftart zeigen den aktuellen Zustand an. Siehe Aktualisieren von Formen und Verbindern zur Darstellung des Modells

Erstellen Sie eine Regel, mit der die bereitgestellten Eigenschaften aktualisiert werden. Siehe Regeln übertragen Änderungen im Modell.

Oder verwenden Sie OnAssociatedPropertyChanged(), um nicht bereitgestellte Features wie Linkpfeile oder Schriftart zu aktualisieren.
Symbol für Formänderungen zum Angeben des Zustands. Legen Sie die Sichtbarkeit der Decoratorzuordnung im Fenster „DSL-Details“ fest. Suchen Sie nach mehreren Bilddecorators an derselben Position. Siehe Aktualisieren von Formen und Verbindern zur Darstellung des Modells

Oder überschreiben Sie ImageField.GetDisplayImage(). Siehe Beispiel in ImageField.
Festlegen eines Hintergrundbilds für eine Form Überschreiben Sie InitializeInstanceResources(), um ein verankertes ImageField hinzuzufügen.
Schachteln von Formen in beliebiger Tiefe Richten Sie eine rekursive Einbettungsstruktur ein. Definieren Sie BoundsRules, um die Formen zu begrenzen.
Fügen Sie Verbinder an festen Punkten an der Begrenzung eines Elements an. Definieren Sie eingebettete Terminalelemente, die durch kleine Ports im Diagramm dargestellt werden. Verwenden Sie BoundsRules, um die Ports an Ort und Stelle zu fixieren. Weitere Informationen finden Sie im Beispiel für das Leitungsdiagramm unter SDK für Visualisierung und Modellierung.
Textfeld zeigt einen Wert an, der von anderen Werten abgeleitet ist. Ordnen Sie den Textdecorator einer berechneten oder benutzerdefinierten Speicherdomäneneigenschaft zu. Weitere Informationen finden Sie unter Berechnete und benutzerdefinierte Speichereigenschaften.
Verteilen von Änderungen zwischen Modellelementen oder Formen Siehe Validierung in einer domänenspezifischen Sprache.
Verteilen Sie Änderungen an Ressourcen wie andere Visual Studio-Erweiterungen außerhalb des Speichers. Siehe Ereignishandler propagieren Änderungen außerhalb des Modells.
Eigenschaftenfenster zeigt Eigenschaften eines zugehörigen Elements an. Richten Sie die Eigenschaftenweiterleitung ein. Siehe 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 demselben Kategorienamen werden im selben Abschnitt angezeigt. Sie können auch die Kategorie einer Beziehungsrolle festlegen.
Steuern des Benutzerzugriffs auf Domäneneigenschaften Legen Sie Is Browsable auf „false“ fest, um zu verhindern, dass eine Domäneneigenschaft zur Laufzeit im Eigenschaftenfenster angezeigt wird. Sie können sie weiterhin Textdecorators zuordnen.

Is UI Read Only 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. Siehe Anpassen des Modell-Explorers.
Aktivieren des Kopierens, Ausschneidens und Einfügens Legen Sie im DSL-Explorer die Eigenschaft Enable Copy Paste des Knotens Editor 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 und so komplexere Effekte zu erzielen.

Siehe Anpassen des Kopierverhaltens.
Löschen, erneutes Überordnen oder erneutes Verknüpfen verwandter Elemente, wenn ein Element gelöscht wird. Legen Sie den Wert Propagates Delete einer Beziehungsrolle fest. Für komplexere Effekte überschreiben Sie die Methoden ShouldVisitRelationship und ShouldVisitRolePlayer in der Klasse MyDslDeleteClosure, die in DomainModel.cs definiert sind.
Behalten Sie das Layout und die Darstellung der Form beim Kopieren und bei Drag & Drop bei. Fügen Sie die Formen und Verbinder der Kopie von ElementGroupPrototype hinzu. Für das Überschreiben empfiehlt sich die Methode ElementOperations.CreateElementGroupPrototype().

Siehe Anpassen des Kopierverhaltens.
Fügen Sie Formen an einer ausgewählten Stelle ein, beispielsweise an der aktuelle Cursorposition. Überschreiben Sie ClipboardCommandSet.ProcessOnCopy() zur Verwendung der standortspezifischen Version von ElementOperations.Merge(). Siehe Anpassen des Kopierverhaltens.
Erstellen zusätzlicher Links beim Einfügen Überschreiben von ClipboardCommandSet.ProcessOnPasteCommand()
Aktivieren des Ziehens und Ablegens aus diesem Diagramm, anderen DSLs und Windows-Elementen Siehe Gewusst wie: Hinzufügen eines Drag & Drop-Handlers
Lassen Sie zu, dass eine Form oder ein Tool auf eine untergeordnete Form, z. B. einen Port, gezogen wird, als würde es auf die übergeordnete Form gezogen. Definieren Sie eine Elementmerge-Anweisung für die Zielobjektklasse, um das abgelegte Objekt an das übergeordnete Objekt weiterzuleiten. Siehe Anpassen der Elementerstellung und -verschiebung.
Lassen Sie zu, dass eine Form oder ein Tool auf eine Form gezogen wird, und lassen Sie zusätzliche Links oder Objekte erstellen. Beispielsweise, um zuzulassen, dass ein Kommentar auf ein Element abgelegt wird, mit dem er verknüpft werden soll. Definieren Sie eine Elementmerge-Anweisung für die Zieldomänenklasse, und definieren Sie die zu generierenden Verbindungen. In komplexen Fällen können Sie benutzerdefinierten Code hinzufügen. Siehe Anpassen der Elementerstellung und -verschiebung.
Erstellen Sie eine Gruppe von Elementen mit einem einzigen Tool. Beispielsweise eine Komponente mit einem festen Satz von Ports. Überschreiben Sie die Toolbox-Initialisierungsmethode in ToolboxHelper.cs. Erstellen Sie einen Elementgruppenprototyp (Element Group Prototype, EGP), der die Elemente und ihre Beziehungslinks enthält. Siehe Anpassen der 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, Linkverbindungsanweisungen (Link Connect Directives, LCDs) hinzu. Die LCDs bestimmen den Typ der Beziehung aus den Typen der beiden Elemente. Damit dies von den Zuständen der Elemente abhängig gemacht werden kann, können Sie benutzerdefinierten Code hinzufügen. Siehe Anpassen der Tools und der Toolbox.
Sticky Tools: Der Benutzer kann auf ein beliebiges Tool doppelklicken, um viele Formen oder Verbinder nacheinander zu erstellen. Wählen Sie im DSL-Explorer den Editor-Knoten aus. Legen Sie im Eigenschaftenfenster die Option Uses Sticky Toolbox Items fest.
Definieren von Menübefehlen Siehe Vorgehensweise: Ändern eines Standardmenübefehls
Einschränken des Modells mit Validierungsregeln Siehe Validierung in einer domänenspezifischen 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. Siehe Anpassen von Dateispeicher und XML-Serialisierung
Speichern Sie Modelle in Datenbanken oder anderen Medien. Überschreiben Sie YourLanguageDocData

Siehe Anpassen von Dateispeicher und XML-Serialisierung
Integrieren Sie mehrere DSLs, sodass sie als Teil einer Anwendung funktionieren. Siehe Integrieren von Modellen mit Visual Studio-ModelBus.
Lassen Sie Ihre DSL von Drittanbietern erweitern, 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

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.