Freigeben über


Definieren Sie eine domänenspezifische Sprache

Um eine domänenspezifische Sprache (Domain-Specific Language, DSL) zu definieren, erstellen Sie eine Visual Studio-Projektmappe aus einer Vorlage. Der zentrale Bestandteil der Projektmappe ist das DSL-Definitionsdiagramm, das in "DslDefinition.dsl" gespeichert wird. Die DSL-Definition definiert die Klassen und Formen der DSL. Nachdem Sie diese Elemente geändert und weitere hinzugefügt haben, können Sie Programmcode hinzufügen, um die DSL weiter anzupassen.

Wenn Sie mit DSLs noch nicht vertraut sind, wird empfohlen, das DSL-Tools-Lab durchzuarbeiten. Sie finden es auf dieser Website: SDK für Visualisierung und Modellierung.

Auswählen einer Vorlagenprojektmappe

Zur Definition einer DSL müssen folgende Komponenten installiert sein:

  • Visual Studio
  • Workload für die Entwicklung von Visual Studio-Erweiterungen (enthält das Visual Studio SDK)
  • Modellierungs-SDK (installiert als separate Komponente in Visual Studio)

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.

Zum Erstellen einer neuen DSL erstellen Sie mithilfe der Projektvorlage „Domänenspezifische Sprache“ eine neue Visual Studio-Projektmappe.

So erstellen Sie eine DSL-Projektmappe

  1. Erstellen Sie ein neues Projekt für eine domänenspezifische Sprache.

    Der Assistent für domänenspezifische Sprachen wird geöffnet und zeigt eine Liste mit Vorlagen für DSL-Projektmappen an.

  2. Klicken Sie auf die einzelnen Vorlagen, um eine Beschreibung anzuzeigen. Wählen Sie die Projektmappe aus, die Ihren Vorstellungen am nächsten kommt.

    Jede DSL-Vorlage definiert eine grundlegende, funktionsfähige DSL. Sie bearbeiten diese DSL nach Ihren Anforderungen.

    Klicken Sie auf die Beispiele, um weitere Informationen anzuzeigen.

    • Wählen Sie Aufgabenfluss aus, um eine DSL mit Verantwortlichkeitsbereichen (Swimlanes) zu erstellen. Verantwortlichkeitsbereiche sind vertikale oder horizontale Bereiche des Diagramms.

    • Wählen Sie Komponentenmodelle aus, um eine DSL mit Anschlüssen zu erstellen. Anschlüsse sind kleine Formen am Rand einer größeren Form.

    • Wählen Sie Klassendiagramme aus, um eine DSL mit Depotformen zu definieren. Depot-Formen enthalten Listen von Elementen.

    • Wählen Sie in anderen Fällen, oder wenn Sie sich nicht sicher sind, Minimale Sprache aus.

    • Wählen Sie Minimaler WinForm-Designer oder Minimaler WPF-Designer aus, um eine DSL zu erstellen, die auf einer Windows Forms- oder WPF-Oberfläche angezeigt wird. Sie müssen Code zur Definition des Editors schreiben. Weitere Informationen finden Sie in den folgenden Themen:

      Erstellen einer Windows Forms-basierten domänenspezifischen Sprache

      Erstellen einer WPF-basierten domänenspezifischen Sprache

  3. Geben Sie auf der entsprechenden Seite des Assistenten eine Dateinamenerweiterung für die DSL ein. Diese Erweiterung wird für Dateien mit Instanzen Ihrer DSL verwendet.

    • Wählen Sie eine Dateinamenerweiterung, die keiner Anwendung auf Ihrem Computer bzw. auf einem Computer, auf dem Sie die DSL installieren möchten, zugeordnet ist. docx und htm sind beispielsweise keine akzeptablen Erweiterungen.

    • Der Assistent warnt Sie, wenn die eingegebene Erweiterung bereits als DSL verwendet wird. Verwenden Sie nach Möglichkeit eine andere Dateinamenerweiterung. Sie können die experimentelle Instanz des Visual Studio SDK auch zurücksetzen, um alte experimentelle Designer zu löschen. Wechseln Sie ins Windows-Startmenü, setzen Sie Visual Studio zurück, und führen Sie dann den Befehl Microsoft Visual Studio Experimental Instance zurücksetzen aus, der Ihrer Version von Visual Studio entspricht.

  4. Auf den anderen Seiten können Sie Einstellungen anpassen oder die Standardwerte übernehmen.

  5. Klicken Sie auf Fertig stellen.

    Der Assistent erstellt eine Projektmappe mit zwei oder drei Projekten und generiert Code aus der DSL-Definition.

    Die Benutzeroberfläche gleicht nun der folgenden Abbildung.

    DSL-Designer

    Diese Projektmappe definiert eine domänenspezifische Sprache. Weitere Informationen finden Sie unter Übersicht über die Benutzeroberfläche für DSL-Tools.

Testen der Projektmappe

Die Vorlagenprojektmappe enthält eine funktionsfähige DSL, die Sie ändern oder direkt verwenden können.

Drücken Sie F5 oder STRG+F5, um die Projektmappe zu testen. Eine neue Instanz von Visual Studio wird im experimentellen Modus geöffnet.

Öffnen Sie in der neuen Instanz von Visual Studio im Projektmappen-Explorer die Beispieldatei. Sie wird als Diagramm mit einem Werkzeugkasten geöffnet.

Bei Ausführung einer Projektmappe, die Sie aus der Vorlage Minimale Sprache erstellt haben, ähnelt die experimentelle Visual Studio-Instanz folgendem Beispiel:

DSL-Beispielstruktur in Visual Studio

Experimentieren Sie mit den Werkzeugen. Erstellen Sie Elemente, und verbinden Sie sie.

Schließen Sie die experimentelle Instanz von Visual Studio.

Hinweis

Wenn Sie die DSL geändert haben, können Sie die Formen in der "Sample"-Testdatei nicht mehr sehen. Sie können aber neue Elemente erstellen.

Ändern der Vorlagen-DSL

Benennen Sie einige oder alle Domänenklassen und Formklassen der Vorlagen-DSL-Definition um, und behalten Sie sie bei. Die neuen Klassennamen sollten gültige CLR-Namen ohne Leerzeichen oder Interpunktionszeichen sein.

Die Beibehaltung der folgenden Klassen ist besonders sinnvoll:

  • Die Stammklasse wird links oben im DSL-Definitionsdiagramm unter Klassen und Beziehungen angezeigt. Benennen Sie sie in einen von der DSL verschiedenen Namen um. Eine DSL namens Musikbibliothek könnte z. B. eine Stammklasse Musik haben.

  • Die Diagrammklasse wird rechts unten im DSL-Definitionsdiagramm in der Spalte Diagrammelemente angezeigt. Möglicherweise müssen Sie einen Bildlauf nach rechts durchführen, um sie zu sehen. Sie hat standardmäßig den Namen IhreDslDiagramm.

  • Wenn Sie die Vorlage Aufgabenfluss verwendet haben und Diagramme mit Verantwortlichkeitsbereichen erstellen möchten, sollten Sie die Actor-Domänenklasse und die ActorSwimlane-Form beibehalten und umbenennen.

    Löschen Sie andere Klassen nach Bedarf, oder benennen Sie sie um.

Muster zum Definieren einer DSL

Es ist empfehlenswert, beim Entwickeln einer DSL nur jeweils ein oder zwei Features gleichzeitig hinzuzufügen bzw. anzupassen. Fügen Sie ein Feature hinzu, führen Sie die DSL aus und testen Sie sie. Fügen Sie dann ein oder zwei weitere Features hinzu. Ein typisches Feature Ihrer DSL könnte folgendermaßen aussehen:

  • Eine Domänenklasse, die einbettende Beziehung, die das Element mit dem Modell verbindet, die erforderliche Form zum Anzeigen von Elementen der Klasse im Diagramm sowie das Elementwerkzeug, mit dem Benutzer Elemente erstellen können.

  • Die Domäneneigenschaften einer Domänenklasse und die Decorator-Elemente, die sie in einer Form anzeigen.

  • Eine Verweisbeziehung und der Konnektor, der sie im Diagramm anzeigt, sowie das Konnektorwerkzeug, mit dem Benutzer Verbindungen erstellen können.

  • Eine Anpassung, die Programmcode erfordert, wie z. B. eine Validierungseinschränkung oder ein Menübefehl.

    In den folgenden Abschnitten wird die Erstellung der nützlichsten DSL-Features beschrieben. Es gibt viele andere Muster, nach denen eine DSL erstellt werden kann, aber die folgenden sind die gängigsten.

Hinweis

Denken Sie nach dem Hinzufügen eines Features daran, auf der Symbolleiste des Projektmappen-Explorers auf Alle Vorlagen transformieren zu klicken, bevor Sie die DSL erstellen und ausführen.

In der folgenden Abbildung sind die Klassen und Beziehungen der DSL dargestellt, die in diesem Thema als Beispiel verwendet wird.

Einbetten von und Verweisen auf Beziehungen

Die nächste Abbildung zeigt ein Beispielmodell dieser DSL:

Instanzmodell für generierte DSL

Hinweis

"Modell" bezieht sich auf eine Instanz Ihrer DSL, die Benutzer erstellen. Sie wird üblicherweise als Diagramm dargestellt. In diesem Thema werden das DSL-Definitionsdiagramm und die Modelldiagramme erläutert, die bei Verwendung der DSL angezeigt werden.

Definieren von Domänenklassen

Domänenklassen stellen die Konzepte der DSL dar. Die Instanzen sind Modellelemente. In einer DSL Musikbibliothek verwenden Sie beispielsweise Domänenklassen wie Album und Song.

Zum Erstellen einer Domänenklasse ziehen Sie das Tool Benannte Domänenklasse in das Diagramm und benennen die Klasse dann um.

Weitere Informationen finden Sie unter Eigenschaften von Domänenklassen.

Erstellen einer einbettenden Beziehung für jede Domänenklasse

Jede Domänenklasse mit Ausnahme der Stammklasse muss Ziel mindestens einer einbettenden Beziehung sein, oder sie muss von einer Klasse erben, die Ziel einer einbettenden Beziehung ist.

Jedes Modellelement in einem Modell ist ein Knoten in einer einzelnen Struktur einbettender Beziehungen. Quelle und Ziel einer einbettenden Beziehung werden häufig als übergeordnetes und untergeordnetes Element bezeichnet.

Die Auswahl eines übergeordneten Elements für eine Domänenklasse hängt davon ab, wie die Lebensdauer ihrer Elemente von anderen Elementen abhängen soll. Wenn ein Knoten einer Struktur gelöscht wird, wird auch seine Unterstruktur gelöscht. Daher werden Klassen von Elementen, deren Existenz nicht von anderen abhängt, direkt unter der Stammklasse eingebettet.

Wenn Sie ein Element innerhalb eines anderen Elements anzeigen, möchten Sie normalerweise eine Besitzerbeziehung darstellen. In diesem Fall wird als übergeordnete Klasse am besten die Klasse des Containers gewählt. Dies gilt jedoch nicht, wenn das in einem Container dargestellte Element tatsächlich nur ein Verweislink auf ein unabhängiges Element ist. In diesem Fall wird beim Löschen des Containers der Verweis gelöscht, aber nicht sein Ziel.

In den hier beschriebenen DSL-Definitionsmustern wird vorausgesetzt, dass beim Löschen eines Containers die in dem Container dargestellten Elemente ebenfalls gelöscht werden. Komplexere Schemas können durch Definieren von Regeln erzielt werden.

Darstellung des Elements Übergeordnete (einbettende) Klasse Beispiel in DSL-Projektmappenvorlage
Form im Diagramm

Verantwortlichkeitsbereich
Stammklasse der DSL Minimale Sprache

Aufgabenfluss: Actor-Klasse
Form in Verantwortlichkeitsbereich Domänenklasse von Elementen, die als Verantwortlichkeitsbereiche dargestellt werden. Aufgabenfluss: Task-Klasse
Element in Liste in Form, das zusammen mit Container gelöscht wird.

Anschluss am Rand einer Form
Der Containerform zugeordnete Domänenklasse Klassendiagramm: Attribute-Klasse

Komponentendiagramm: Port-Klasse
Element in Liste, nicht zusammen mit Container gelöscht Stammklasse der DSL

Die Liste enthält Verweislinks.
Nicht direkt angezeigt Die Klasse, von der es Bestandteil ist

Im Beispiel "Musikbibliothek" werden Alben als Rechtecke dargestellt, in denen die Titel von Songs aufgelistet sind. Daher ist das übergeordnete Element von "Album" die Stammklasse "Musik", und das übergeordnete Element von "Song" ist "Album".

Um eine Domänenklasse und ihre Einbettung gleichzeitig zu erstellen, klicken Sie auf das Tool Einbettende Beziehung, anschließend auf die übergeordnete Klasse und dann auf einen leeren Bereich des Diagramms.

In der Regel müssen Sie den Namen der einbettenden Beziehung und ihrer Rollen nicht anpassen, da automatisch die Klassennamen verwendet werden.

Weitere Informationen finden Sie unter Eigenschaften von Domänenbeziehungen und Eigenschaften von Domänenrollen.

Hinweis

Einbettung ist nicht identisch mit Vererbung. Die untergeordneten Elemente in einer einbettenden Beziehung erben keine Features von ihren übergeordneten Elementen.

Hinzufügen von Domäneneigenschaften zu den einzelnen Domänenklassen

In Domäneneigenschaften werden Werte gespeichert. Beispiele: Name, Titel, Veröffentlichungsdatum.

Klicken Sie in der Klasse auf Domäneneigenschaften, drücken Sie die EINGABETASTE, und geben Sie dann den Namen einer Eigenschaft ein. Der Standardtyp einer Domäneneigenschaft lautet String. Wenn Sie den Typ ändern möchten, wählen Sie die Domäneneigenschaft aus, und legen Sie Typ im Eigenschaftenfenster fest. Befindet sich der gewünschte Typ nicht in der Dropdownliste, lesen Sie unter Hinzufügen von Eigenschaftentypen nach.

Legen Sie eine Eigenschaft als Elementnamen fest. Wählen Sie eine Domäneneigenschaft aus, mit der Elemente im Sprach-Explorer identifiziert werden können. Beispielsweise könnten Sie in der "Song"-Domänenklasse die "Titel"-Domäneneigenschaft auswählen. Legen Sie im Eigenschaftenfenster die Option Ist Elementname auf true fest.

Erstellen abgeleiteter Domänenklassen

Soll eine Domänenklasse Varianten aufweisen, die ihre Eigenschaften und Beziehungen erben, erstellen Sie von der Domänenklasse abgeleitete Klassen. "Album" könnte z. B. die abgeleiteten Klassen WMA und MP3 haben.

Erstellen Sie die abgeleitete Klasse mit dem Tool Domänenklasse.

Klicken Sie auf das Tool Vererbung, anschließend auf die abgeleitete Klasse und dann auf die Stammklasse.

Unter Umständen ist es sinnvoll, den Vererbungsmodifizierer der Stammklasse als abstrakt festzulegen. Wenn Sie voraussichtlich Instanzen der Basisklasse benötigen, können Sie stattdessen eine gesonderte abgeleitete Klasse für diese erstellen.

Abgeleitete Klassen erben die Eigenschaften und Rollen ihrer Basisklassen.

Bereinigen des DSL-Definitionsdiagramms

Wenn Sie Beziehungen hinzufügen, erscheinen einige Klassen an mehreren Stellen. Um die Anzahl der Darstellungen zu verringern und das Diagramm breiter zu machen, klicken Sie mit der rechten Maustaste auf die Zielklasse einer Beziehung, und klicken Sie dann auf Struktur hier anzeigen. Für den umgekehrten Effekt klicken Sie mit der rechten Maustaste auf die Zielklasse einer Beziehung, und klicken Sie dann auf Struktur aufteilen. Wenn diese Menübefehle nicht angezeigt werden, vergewissern Sie sich, dass nur die Domänenklasse ausgewählt ist.

Verwenden Sie STRG+NACH OBEN und STRG+NACH UNTEN, um Domänenklassen und Formklassen zu verschieben.

Testen der Domänenklassen

So testen Sie die neuen Domänenklassen
  1. Klicken Sie auf der Symbolleiste des Projektmappen-Explorers auf Alle Vorlagen transformieren, um den DSL-Designercode zu generieren. Dieser Schritt kann automatisiert werden. Weitere Informationen finden Sie unter Automatisieren von „Alle Vorlagen transformieren“.

  2. Erstellen Sie die DSL, und führen Sie sie aus. Drücken Sie F5 oder STRG+F5, um eine neue Instanz von Visual Studio im experimentellen Modus auszuführen. Öffnen oder erstellen Sie in der experimentellen Instanz von Visual Studio eine Datei mit der Erweiterung Ihrer DSL.

  3. Öffnen Sie den Explorer. Neben dem Diagramm befindet sich das Sprach-Explorer-Fenster, das standardmäßig den Namen „IhreSprache-Explorer“ hat. Sollten Sie das Fenster nicht sehen, befindet es sich möglicherweise auf einer Registerkarte unter dem Projektmappen-Explorer. Wenn Sie es nicht finden, zeigen Sie im Menü Ansicht auf Weitere Fenster, und klicken Sie dann auf IhreSprache Explorer.

    Im Explorer wird eine Strukturansicht des Modells dargestellt.

  4. Erstellen Sie neue Elemente. Klicken Sie mit der rechten Maustaste oben auf den Stammknoten, und klicken Sie dann auf Neu hinzufügenIhreKlasse.

    Im Sprach-Explorer wird eine neue Instanz Ihrer Klasse angezeigt.

  5. Überprüfen Sie beim Erstellen neuer Instanzen, ob jede Instanz einen anderen Namen hat. Dies trifft nur zu, wenn Sie das Flag Ist Elementname für eine Domäneneigenschaft festgelegt haben.

  6. Untersuchen Sie die Domäneneigenschaften. Wenn eine Instanz Ihrer Klasse ausgewählt ist, überprüfen Sie das Fenster „Eigenschaften“. Es sollte die Domäneneigenschaften zeigen, die Sie für die Domänenklasse definiert haben.

  7. Speichern Sie die Datei, schließen Sie sie, und öffnen Sie sie erneut. Nachdem Sie die Knoten erweitert haben, sollten alle erstellten Instanzen im Explorer sichtbar sein.

Definieren von Formen im Diagramm

Sie können Klassen von Elementen definieren, die in einem Diagramm als Rechtecke, Ellipsen oder Symbole erscheinen.

So definieren Sie eine Klasse von Elementen, die in einem Diagramm als Formen dargestellt werden

  1. Definieren und testen Sie eine Domänenklasse, wie im Abschnitt Definieren von Domänenklassen beschrieben.

    • Das übergeordnete Element der Klasse sollte die Stammklasse sein. Es sollte also eine einbettende Beziehung zwischen der Stammklasse und der neuen Domänenklasse bestehen.

    • Wenn das Diagramm Verantwortlichkeitsbereiche enthält, kann das übergeordnete Element die Domänenklasse sein, die einem Verantwortlichkeitsbereich zugeordnet ist. Lesen Sie den Abschnitt Definieren einer DSL mit Verantwortlichkeitsbereichen, bevor Sie fortfahren.

  2. Fügen Sie eine Formklasse hinzu, um die Elemente im Modelldiagramm darzustellen. Ziehen Sie eines der folgenden Werkzeuge in das DSL-Definitionsdiagramm:

    • Geometrieform stellt ein Rechteck oder eine Ellipse bereit.

    • Bildform zeigt ein angegebenes Bild an.

    • Depotform stellt ein Rechteck dar, das mindestens eine Liste von Elementen enthält.

      Benennen Sie die Formklasse um, die rechts im DSL-Definitionsdiagramm unter "Formen und Konnektoren" angezeigt wird.

  3. Definieren Sie ein Bild, falls Sie eine Bildform erstellt haben.

    1. Erstellen Sie eine Bilddatei beliebiger Größe. Die Formate BMP, JPEG, GIF und EMF werden unterstützt.

    2. Fügen Sie die Datei im Projektmappen-Explorer der Projektmappe unter Dsl\Ressourcen hinzu.

    3. Kehren Sie zum DSL-Definitionsdiagramm zurück, und wählen Sie die neue Bild-Formklasse aus.

    4. Klicken Sie im Eigenschaftenfenster auf die Eigenschaft Bild.

    5. Klicken Sie im Dialogfeld Bild auswählen auf das Dropdownmenü unter Dateiname, und wählen Sie das Bild aus.

  4. Fügen Sie der Form Text-Decorator-Elemente hinzu, um die Domäneneigenschaften anzuzeigen.

    Sie benötigen wahrscheinlich mindestens ein Text-Decorator-Element, um den Namen oder Titel des Modellelements anzuzeigen.

    Klicken Sie mit der rechten Maustaste auf den Header der Formklasse, zeigen Sie auf Hinzufügen, und klicken Sie dann auf Text Decorator. Legen Sie den Namen des Decorator-Elements fest, und legen Sie im Eigenschaftenfenster seine Position fest.

  5. Verbinden Sie jede Form mithilfe einer Diagrammelementzuordnung mit der Domänenklasse, die sie anzeigen soll.

    Klicken Sie auf das Tool Diagrammelementzuordnung, anschließend auf die Domänenklasse und dann auf die Formklasse.

  6. Ordnen Sie die Eigenschaften der Text-Decorator-Elemente zu.

    1. Wählen Sie die graue Linie zwischen der Domänenklasse und der Formklasse aus, die die Diagrammelementzuordnung darstellt.

    2. Klicken Sie im Fenster DSL-Details auf die Registerkarte Decoratorzuordnungen. Wird das Fenster DSL-Details nicht angezeigt, zeigen Sie im Menü Ansicht auf Weitere Fenster, und klicken Sie dann auf DSL-Details. Häufig muss der obere Rand des Fensters angehoben werden, um den gesamten Inhalt anzuzeigen.

    3. Wählen Sie den Namen eines Decorator-Elements aus. Wählen Sie unter Anzeigeeigenschaft den Namen einer Eigenschaft der Domänenklasse aus. Wiederholen Sie dies für jedes Decorator-Element.

      Wenn Sie eine Eigenschaft eines verwandten Elements anzeigen möchten, klicken Sie auf den Dropdown-Strukturnavigator unter Pfad zur Anzeigeeigenschaft.

    4. Stellen Sie sicher, dass neben jedem Decorator-Namen ein Häkchen angezeigt wird.

      Formzuordnungen und DSL-Detailfenster

  7. Erstellen Sie ein Werkzeugkastenelement zum Erstellen von Elementen der Domänenklasse.

    1. Erweitern Sie in DSL-Explorer den Knoten Editor und alle zugehörigen Unterknoten.

    2. Klicken Sie mit der rechten Maustaste auf den Knoten unter Toolboxregisterkarten, der denselben Namen wie Ihre DSL hat, z. B. „Musikbibliothek“. Klicken Sie auf Elementtool hinzufügen.

      Hinweis

      Wenn Sie mit der rechten Maustaste auf den Knoten Tools klicken, wird Elementtool hinzufügen nicht angezeigt. Klicken Sie stattdessen auf den übergeordneten Knoten.

    3. Legen Sie im Eigenschaftenfenster, während das Tool für neue Elemente ausgewählt ist, Klasse auf die kürzlich hinzugefügte Domänenklasse fest.

    4. Legen Sie Beschriftung und QuickInfo fest.

    5. Legen Sie Toolboxsymbol auf ein Symbol fest, das in der Toolbox angezeigt wird. Sie können ein neues Symbol oder ein bereits für ein anderes Werkzeug verwendetes Symbol angeben.

      Um ein neues Symbol zu erstellen, öffnen Sie „Dsl\Ressourcen“ im Projektmappen-Explorer. Kopieren Sie eine der vorhandenen BMP-Dateien für Elementwerkzeuge, und fügen Sie sie ein. Benennen Sie die eingefügte Kopie um, und doppelklicken Sie dann darauf, um sie zu öffnen.

      navigieren Sie zum DSL-Definitionsdiagramm zurück, wählen Sie das Tool aus, und klicken Sie im Eigenschaftenfenster in Toolboxsymbol auf [...]. Wählen Sie im Dialogfeld Bitmap auswählen Ihre BMP-Datei im Dropdownmenü aus.

    Weitere Informationen finden Sie unter Eigenschaften von Geometrieformen und Eigenschaften von Bildformen.

So testen Sie Formen

  1. Klicken Sie auf der Symbolleiste des Projektmappen-Explorers auf Alle Vorlagen transformieren, um den DSL-Designercode zu generieren.

  2. Erstellen Sie die DSL, und führen Sie sie aus. Drücken Sie F5 oder STRG+F5, um eine neue Instanz von Visual Studio im experimentellen Modus auszuführen. Öffnen oder erstellen Sie in der experimentellen Instanz von Visual Studio eine Datei mit der Erweiterung Ihrer DSL.

  3. Überprüfen Sie, ob die Elementwerkzeuge im Werkzeugkasten erscheinen.

  4. Erstellen Sie Formen, indem Sie ein Tool in das Modelldiagramm ziehen.

  5. Überprüfen Sie, ob alle Text-Decorator-Elemente angezeigt werden und ob Folgendes zutrifft:

    1. Sie können sie bearbeiten, es sei denn, Sie haben das Flag Ist schreibgeschützte Benutzeroberfläche für die Domäneneigenschaft aktiviert.

    2. Wenn Sie die Eigenschaft im Eigenschaftenfenster oder im Decorator bearbeiten, wird die jeweils andere Ansicht aktualisiert.

    Nach dem ersten Test einer Form möchten Sie unter Umständen einige Eigenschaften anpassen und erweiterte Features hinzufügen. Weitere Informationen finden Sie unter Anpassen und Erweitern von domänenspezifischen Sprachen.

Definieren von Verweisbeziehungen

Sie können eine Verweisbeziehung zwischen einer Quelldomänenklasse und einer Zieldomänenklasse definieren. Verweisbeziehungen werden in einem Diagramm üblicherweise als Konnektoren, also als Linien zwischen Formen, angezeigt.

Wenn beispielsweise Alben und Interpreten als Formen in einem Diagramm dargestellt werden, könnten Sie eine Beziehung namens "ArtistsAppearedOnAlbums" definieren, die Interpreten mit den Alben verknüpft, an denen sie mitgewirkt haben. Siehe das Beispiel in der Abbildung.

Instanzmodell für generierte DSL

Verweisbeziehungen können auch Elemente desselben Typs verbinden. So ist in einer DSL, die einen Familienstammbaum darstellt, die Beziehung zwischen Eltern und Kindern eine Verweisbeziehung von Person zu Person.

Definieren einer Verweisbeziehung

Klicken Sie auf das Werkzeug "Verweisbeziehung", auf die Quelldomänenklasse der Beziehung und dann auf die Zieldomänenklasse. Die Zielklasse kann mit der Quellklasse übereinstimmen.

Jede Beziehung hat zwei Rollen, die durch die Linien auf beiden Seiten des Beziehungsfelds dargestellt werden. Sie können jede Rolle auswählen und ihre Eigenschaften im Eigenschaftenfenster festlegen.

Erwägen Sie, die Rollen umzubenennen. In einer Beziehung zwischen Personen könnten Sie z. B. die Standardnamen in Eltern und Kinder, Manager und Mitarbeiter, Lehrer und Schüler usw. ändern.

Passen Sie ggf. die Multiplizität der einzelnen Rollen an. Soll jede Person höchstens einen Manager haben, legen Sie die Multiplizität (unter der Beschriftung "Manager") im Diagramm auf 0..1 fest.

Fügen Sie der Beziehung Domäneneigenschaften hinzu. In der Abbildung hat die Beziehung zwischen Interpret und Album eine Eigenschaft "Rolle".

Legen Sie die Allows Duplicates-Eigenschaft der Beziehung fest, wenn zwischen demselben Paar von Modellelementen mehrere Links derselben Klasse vorhanden sein können. Beispielsweise könnten Sie zulassen, dass ein Lehrer einen Schüler in mehreren Fächern unterrichtet.

Formzuordnungen für Verbindungen

Weitere Informationen finden Sie unter Eigenschaften von Domänenbeziehungen und Eigenschaften von Domänenrollen.

Definieren eines Konnektors zur Darstellung der Beziehung

Ein Konnektor stellt eine Linie zwischen zwei Formen im Modelldiagramm dar.

Ziehen Sie das Tool Connector in das DSL-Definitionsdiagramm.

Fügen Sie Text-Decorator-Elemente hinzu, falls Beschriftungen auf dem Konnektor angezeigt werden sollen. Legen Sie deren Positionen fest. Damit Benutzer*innen einen Text-Decorator verschieben können, legen Sie die Ist verschiebbar-Eigenschaft fest.

Verwenden Sie das Tool Diagrammelementzuordnung, um den Connector mit der Verweisbeziehung zu verknüpfen.

Öffnen Sie, während die Diagrammelementzuordnung ausgewählt ist, das Fenster DSL-Details und dann die Registerkarte Decoratorzuordnungen.

Wählen Sie jeden einzelnen Decorator aus, und legen Sie Anzeigeeigenschaft auf die richtige Domäneneigenschaft fest.

Stellen Sie sicher, dass neben jedem Element der Liste Decorator-Elemente ein Häkchen angezeigt wird.

Definieren eines Werkzeugs "Verbindungs-Generator"

Erweitern Sie im Fenster DSL-Explorer den Knoten Editor und alle zugehörigen Unterknoten.

Klicken Sie mit der rechten Maustaste auf den Knoten mit dem Namen Ihrer DSL, und klicken Sie dann auf Neues Verbindungstool hinzufügen.

Führen Sie, während das neue Werkzeug ausgewählt ist, im Eigenschaftenfenster Folgendes aus:

  • Legen Sie Beschriftung und QuickInfo fest.

  • Klicken Sie auf Verbindungs-Generator, und wählen Sie den geeigneten Generator für die neue Beziehung aus.

  • Legen Sie Toolboxsymbol auf das Symbol fest, das in der Toolbox angezeigt werden soll. Sie können ein neues Symbol oder ein bereits für ein anderes Werkzeug verwendetes Symbol angeben.

    Um ein neues Symbol zu erstellen, öffnen Sie „Dsl\Ressourcen“ im Projektmappen-Explorer. Kopieren Sie eine der vorhandenen BMP-Dateien für Elementwerkzeuge, und fügen Sie sie ein. Benennen Sie die eingefügte Kopie um, und doppelklicken Sie dann darauf, um sie zu öffnen.

    navigieren Sie zum DSL-Definitionsdiagramm zurück, wählen Sie das Tool aus, und klicken Sie im Eigenschaftenfenster in Toolboxsymbol auf [...]. Wählen Sie im Dialogfeld Bitmap auswählen Ihre BMP-Datei im Dropdownmenü aus.

So testen Sie eine Verweisbeziehung und einen Konnektor
  1. Klicken Sie auf der Symbolleiste des Projektmappen-Explorers auf Alle Vorlagen transformieren, um den DSL-Designercode zu generieren.

  2. Erstellen Sie die DSL, und führen Sie sie aus. Drücken Sie F5 oder STRG+F5, um eine neue Instanz von Visual Studio im experimentellen Modus auszuführen. Öffnen oder erstellen Sie in der experimentellen Instanz von Visual Studio eine Datei mit der Erweiterung Ihrer DSL.

  3. Überprüfen Sie, ob das Verbindungswerkzeug im Werkzeugkasten erscheint.

  4. Erstellen Sie Formen, indem Sie ein Tool in das Modelldiagramm ziehen.

  5. Erstellen Sie Verbindungen zwischen den Formen. Klicken Sie auf das Konnektorwerkzeug, auf eine Form und dann auf eine andere Form.

  6. Überprüfen Sie, ob Sie keine Verbindungen zwischen ungeeigneten Klassen erstellen können. Besteht die Beziehung beispielsweise zwischen Alben und Interpreten, überprüfen Sie, ob Sie nicht Interpreten mit Interpreten verbinden können.

  7. Überprüfen Sie, ob die Multiplizitäten zutreffend sind. Überprüfen Sie beispielsweise, ob Sie nicht eine Person mit mehreren Managern verbinden können.

  8. Überprüfen Sie, ob alle Text-Decorator-Elemente angezeigt werden und ob Folgendes zutrifft:

    1. Sie können sie bearbeiten, es sei denn, Sie haben das Flag Ist schreibgeschützte Benutzeroberfläche für die Domäneneigenschaft aktiviert.

    2. Wenn Sie die Eigenschaft im Eigenschaftenfenster oder im Decorator bearbeiten, wird die jeweils andere Ansicht aktualisiert.

    Nach dem ersten Test eines Konnektors möchten Sie unter Umständen einige Eigenschaften anpassen und erweiterte Features hinzufügen. Weitere Informationen finden Sie unter Anpassen und Erweitern von domänenspezifischen Sprachen.

Definieren von Formen, die Listen enthalten: Depot-Formen

Eine Depot-Form enthält mindestens eine Liste von Elementen. In einer DSL für eine Musikbibliothek würden Sie z. B. Depot-Formen verwenden, um Musikalben darzustellen. Jedes Album enthält eine Liste von Songs.

Depotform

Am einfachsten erzielen Sie diesen Effekt in einer DSL-Definition, indem Sie eine Domänenklasse für den Container und eine Domänenklasse für jede Liste definieren. Die Containerklasse wird der Depot-Form zugeordnet.

Formzuordnung

Weitere Informationen finden Sie unter Eigenschaften von Depotformen.

So definieren Sie eine Depot-Form

  1. Erstellen Sie die Domänenklasse für den Container. Klicken Sie auf das Tool Einbettende Beziehung, anschließend auf die Stammklasse des Modells und dann auf einen leeren Bereich im DSL-Definitionsdiagramm. Dadurch wird in der Beispielabbildung die Domänenklasse namens "Album" erstellt.

    Alternativ können Sie den Container statt in die Stammklasse auch in eine Domänenklasse einbetten, die einem Verantwortlichkeitsbereich zugeordnet ist.

    Fügen Sie der Klasse eine Domäneneigenschaft wie „Name“ hinzu, und legen Sie im Eigenschaftenfenster das zugehörige Flag Ist Elementname fest.

  2. Erstellen Sie die Domänenklasse für die Listenelemente. Klicken Sie auf das Tool Embedding Relationship, anschließend auf die Containerklasse (Album) und dann auf einen leeren Bereich im Diagramm. Dadurch wird in der Beispielabbildung die Domänenklasse namens "Song" erstellt.

    Fügen Sie der Klasse eine Domäneneigenschaft wie „Titel“ hinzu, und legen Sie das zugehörige Flag Ist Elementname fest.

    Fügen Sie weitere Domäneneigenschaften hinzu.

    Fügen Sie eine weitere Domänenklasse für Listenelemente jeder Liste hinzu, die Sie anzeigen möchten.

  3. Um mehrere Elementtypen in der Liste zu kombinieren, erstellen Sie Klassen, die von der Listenklasse erben. Machen Sie die Listenklasse abstrakt, indem Sie den zugehörigen Vererbungsmodifizierer festlegen.

    Möchten Sie beispielsweise klassische Musik nach Komponisten statt nach Interpreten sortieren, könnten Sie zwei Unterklassen von Song erstellen: ClassicalSong und NonClassicalSong.

  4. Erstellen Sie die Depotform. Ziehen Sie das Tool Depotform in das DSL-Definitionsdiagramm.

    Fügen Sie ein Text-Decorator-Element hinzu, und legen Sie seinen Namen fest.

    Fügen Sie ein Depot hinzu, und legen Sie seinen Namen fest.

  5. Wenn Benutzer*innen die Listendepots ausblenden können sollen, klicken Sie mit der rechten Maustaste auf die Klasse der Depotform, zeigen Sie auf Hinzufügen, und klicken Sie dann auf Decorator-Element erweitern/reduzieren. Legen Sie im Eigenschaftenfenster die Position des Decorator-Elements fest.

  6. Klicken Sie auf das Tool Diagrammelementzuordnung, anschließend auf die Domänenklasse des Containers und dann auf die Depotform.

  7. Wählen Sie den Diagrammelementzuordnungs-Link zwischen der Domänenklasse und der Form aus. Führen Sie im Fenster DSL-Details Folgendes aus:

    1. Klicken Sie auf die Registerkarte Decorator-Elemente. Klicken Sie auf den Namen des Decorator-Elements, und wählen Sie dann das entsprechende Element unter Anzeigeeigenschaft aus. Stellen Sie sicher, dass neben dem Namen des Decorator-Elements ein Häkchen angezeigt wird.

    2. Klicken Sie auf die Registerkarte Depotzuordnungen.

      Klicken Sie auf den Namen des Depots.

      Navigieren Sie unter Pfad der angezeigten Elementauflistung zur Listenelementklasse („Song“). Klicken Sie auf den Dropdownpfeil, um das Navigatorwerkzeug zu verwenden.

      Wählen Sie unter Anzeigeeigenschaft die Eigenschaft aus, die in der Liste angezeigt werden soll. Im Beispiel ist dies "Titel".

Hinweis

Mithilfe der Pfadfelder in der Decorator-Zuordnung und der Depot-Zuordnung können Sie komplexere Beziehungen zwischen der Domänenklasse und der Depot-Form erstellen.

So definieren Sie ein Werkzeug zum Erstellen der Form

  1. Erstellen Sie ein Werkzeugkastenelement zum Erstellen von Elementen der Domänenklasse.

  2. Erweitern Sie in DSL-Explorer den Knoten Editor und alle zugehörigen Unterknoten.

  3. Klicken Sie mit der rechten Maustaste auf den Knoten unter Toolboxregisterkarten, der denselben Namen wie Ihre DSL hat, z. B. „Musikbibliothek“. Klicken Sie auf Elementtool hinzufügen.

    Hinweis

    Wenn Sie mit der rechten Maustaste auf den Knoten Tools klicken, wird Elementtool hinzufügen nicht angezeigt. Klicken Sie stattdessen auf den übergeordneten Knoten.

  4. Legen Sie im Eigenschaftenfenster, während das Tool für neue Elemente ausgewählt ist, Klasse auf die kürzlich hinzugefügte Domänenklasse fest.

  5. Legen Sie Beschriftung und QuickInfo fest.

  6. Legen Sie Toolboxsymbol auf ein Symbol fest, das in der Toolbox angezeigt wird. Sie können ein neues Symbol oder ein bereits für ein anderes Werkzeug verwendetes Symbol angeben.

    Um ein neues Symbol zu erstellen, öffnen Sie „Dsl\Ressourcen“ im Projektmappen-Explorer. Kopieren Sie eine der vorhandenen BMP-Dateien für Elementwerkzeuge, und fügen Sie sie ein. Benennen Sie die eingefügte Kopie um, und doppelklicken Sie dann darauf, um sie zu öffnen.

    navigieren Sie zum DSL-Definitionsdiagramm zurück, wählen Sie das Tool aus, und klicken Sie im Eigenschaftenfenster in Toolboxsymbol auf [...]. Wählen Sie im Dialogfeld Bitmap auswählen Ihre BMP-Datei im Dropdownmenü aus.

So testen Sie eine Depot-Form

  1. Klicken Sie auf der Symbolleiste des Projektmappen-Explorers auf Alle Vorlagen transformieren, um den DSL-Designercode zu generieren.

  2. Erstellen Sie die DSL, und führen Sie sie aus. Drücken Sie F5 oder STRG+F5, um eine neue Instanz von Visual Studio im experimentellen Modus auszuführen. Öffnen oder erstellen Sie in der experimentellen Instanz von Visual Studio eine Datei mit der Erweiterung Ihrer DSL.

  3. Überprüfen Sie, ob das Werkzeug im Werkzeugkasten erscheint.

  4. Ziehen Sie das Werkzeug in das Modelldiagramm. Eine Form wird erstellt.

    Überprüfen Sie, ob der Name des Elements angezeigt und automatisch auf einen Standardwert festgelegt wird.

  5. Klicken Sie mit der rechten Maustaste auf den Header der neuen Form, und klicken Sie dann auf IhrListenelement hinzufügen. Im Beispiel lautet der Befehl „Song hinzufügen“.

    Überprüfen Sie, ob ein Element mit einem neuen Namen in der Liste erscheint.

  6. Klicken Sie auf eines der Listenelemente, und betrachten Sie das Eigenschaftenfenster. Es sollten die Eigenschaften der Listenelemente angezeigt werden.

  7. Öffnen Sie den Sprach-Explorer. Überprüfen Sie, ob die Containerknoten mit darin enthaltenen Listenelementknoten angezeigt werden.

    Generierter Explorer für DSL

    Nach dem ersten Test einer Depot-Form möchten Sie unter Umständen einige Eigenschaften anpassen und erweiterte Features hinzufügen. Weitere Informationen finden Sie unter Anpassen und Erweitern von domänenspezifischen Sprachen.

Normalerweise ist ein in einem Depot angezeigtes Element ein untergeordnetes Element des Elements, das durch die Depot-Form dargestellt wird. Aber manchmal soll ein Element angezeigt werden, das durch eine Verweisbeziehung damit verbunden ist.

Wir könnten z. B. ein zweites Depot zu AlbumShape hinzufügen, in dem eine Liste der mit dem Album verbundenen Interpreten angezeigt wird.

In diesem Fall sollte das Depot statt des Elements, auf das verwiesen wird, den Link anzeigen. Denn wenn der Benutzer das Element im Depot auswählt und DELETE drückt, soll der Link gelöscht werden und nicht das Element, auf das verwiesen wird.

Dennoch kann der Name des Elements, auf das verwiesen wird, im Depot erscheinen.

Im folgenden Verfahren wird vorausgesetzt, dass Sie bereits die Domänenklasse, die Verweisbeziehung, die Depot-Form und die Diagrammelementzuordnung erstellt haben, wie weiter oben in diesem Abschnitt beschrieben.

  1. Fügen Sie der Depotform ein Depot hinzu. Klicken Sie im DSL-Definitionsdiagramm mit der rechten Maustaste auf die Depotform, zeigen Sie auf Hinzufügen, und klicken Sie dann auf Depot.

  2. Legen Sie Auflistungspfad „Angezeigte Elemente“ fest, um zu dem Link und nicht zu seinem Zielelement zu navigieren. Klicken Sie auf das Dropdownmenü, und verwenden Sie die Strukturansicht, um die Verweisbeziehung statt ihres Ziels auszuwählen. Im Beispiel lautet die Beziehung ArtistAppearedOnAlbums.

  3. Legen Sie Pfad zur Anzeigeeigenschaft fest, um vom Link zum Zielelement zu navigieren. Im Beispiel ist dies Artist.

  4. Legen Sie Anzeigeeigenschaft auf die entsprechende Eigenschaft des Zielelements fest, z. B. Name.

  5. Transformieren Sie alle Vorlagen, erstellen Sie die DSL und führen Sie sie aus, und öffnen Sie dann ein Testmodell.

  6. Erstellen Sie in dem Modelldiagramm die entsprechenden Formklassen, legen Sie ihre Namen fest, und erstellen Sie einen Link zwischen ihnen. In der Depot-Form sollten die Namen der verbundenen Elemente angezeigt werden.

  7. Wählen Sie entweder den Link oder das Element in der Depot-Form aus. Sowohl der Link als auch das Element sollte angezeigt werden.

Definieren von Anschlüssen am Rand einer anderen Form

Ein Anschluss ist eine Form, die sich am Rand einer anderen Form befindet.

Anschlüsse können auch verwendet werden, um einen festen Verbindungspunkt an einer anderen Form bereitzustellen, zu dem der Benutzer Konnektoren zeichnen kann. In diesem Fall können Sie die Anschluss-Form transparent machen.

Wenn Sie ein Beispiel mit Anschlüssen sehen möchten, wählen Sie beim Erstellen einer neuen DSL-Projektmappe die Vorlage Komponentendiagramm aus. Dieses Beispiel zeigt die wesentlichen Punkte, die Sie bei der Definition von Anschlüssen berücksichtigen können:

  • Es gibt eine Domänenklasse, die den Container der Anschlüsse darstellt: Component.

  • Es gibt eine Domänenklasse, die Anschlüsse darstellt. In diesem Beispiel ComponentPort.

  • Es gibt eine einbettende Beziehung von der Container-Domänenklasse zur Anschluss-Domänenklasse. Weitere Informationen finden Sie unter Definieren von Domänenklassen.

  • Wenn verschiedene Anschlusstypen in demselben Container gemischt werden sollen, können Sie Unterklassen der Anschluss-Domänenklasse erstellen. In dem Beispiel erben InPort und OutPort von ComponentPort.

  • Die Container-Domänenklasse kann jeder beliebigen Form zugeordnet werden. Im Beispiel ist dies ComponentShape. Weitere Informationen finden Sie unter Definieren von Formen.

  • Die Anschluss-Domänenklassen werden Anschluss-Formen zugeordnet. Sie können entweder die abgeleiteten Klassen verschiedenen Anschluss-Formklassen zuordnen oder die Basisklasse einer Anschluss-Formklasse zuordnen.

    Ansonsten verhalten sich Anschlussformen wie unter Definieren von Formen beschrieben.

    Weitere Informationen finden Sie unter Eigenschaften von Anschlussformen.

Definieren einer DSL mit Verantwortlichkeitsbereichen

Verantwortlichkeitsbereiche sind vertikale oder horizontale Bereiche eines Diagramms. Jeder Verantwortlichkeitsbereich entspricht einem Modellelement. Ihre DSL-Definition muss eine Domänenklasse für die Verantwortlichkeitsbereich-Elemente enthalten.

Am besten lässt sich eine DSL mit Verantwortlichkeitsbereichen erstellen, indem Sie eine neue DSL-Projektmappe erstellen und die Projektmappenvorlage "Aufgabenfluss" auswählen. In der DSL-Definition ist die Actor-Klasse die Domänenklasse, die dem Verantwortlichkeitsbereich zugeordnet wird. Benennen Sie diese und die anderen Klassen nach den Anforderungen Ihres Projekts um.

Um eine Klasse hinzuzufügen, die als Form innerhalb eines Verantwortlichkeitsbereichs angezeigt wird, erstellen Sie eine einbettende Beziehung zwischen der Klasse des Verantwortlichkeitsbereichs und Ihrer neuen Klasse. Benutzer können Elemente von einem Verantwortlichkeitsbereich in einen anderen ziehen, aber jedes Element befindet sich immer innerhalb eines bestimmten Verantwortlichkeitsbereichs. In der Projektmappenvorlage "Aufgabenfluss" ist "FlowElement" ein untergeordnetes Element der Verantwortlichkeitsbereich-Klasse.

Um eine Klasse hinzuzufügen, die als Form unabhängig von Verantwortlichkeitsbereichen angezeigt wird, erstellen Sie eine einbettende Beziehung zwischen der Stammklasse und Ihrer neuen Klasse. Benutzer können diese Formen beliebig im Diagramm platzieren, auch über die Grenzen von Verantwortlichkeitsbereichen hinweg und außerhalb von Verantwortlichkeitsbereichen. In der Projektmappenvorlage "Aufgabenfluss" ist "Comment" ein untergeordnetes Element der Stammklasse.

Weitere Informationen finden Sie unter Eigenschaften von Verantwortlichkeitsbereichen.

Hinzufügen von Eigenschaftentypen

Domänenenumerationen und Literale

Eine Domänenenumeration ist ein Typ mit mehreren Literalwerten.

Um eine Domänenenumeration hinzuzufügen, klicken Sie im DSL-Explorer mit der rechten Maustaste auf den Stamm des Modells, und klicken Sie dann auf Neue Domänenenumeration hinzufügen. Das Element wird im DSL-Explorer unter dem Knoten Domänentypen angezeigt. Das Element erscheint nicht im Diagramm.

Um der Domänenenumeration Enumerationsliterale hinzuzufügen, klicken Sie im DSL-Explorer mit der rechten Maustaste auf die Domänenenumeration, und klicken Sie dann auf Neues Enumerationsliteral hinzufügen.

Eine Eigenschaft, die einen Enumerationstyp besitzt, kann standardmäßig jeweils nur auf einen Wert der Enumeration festgelegt werden. Sollen Benutzer*innen und Programmierer*innen eine beliebige Kombination von Werten festlegen können (ein Bitfeld), legen Sie die IsFlags-Eigenschaft der Enumeration fest.

Externe Typen

Wenn Sie beim Festlegen des Typs einer Domäneneigenschaft den gewünschten Typ nicht in der Dropdownliste Typ finden, können Sie einen externen Typ hinzufügen. Sie könnten der Liste beispielsweise den Typ System.Drawing.Color hinzufügen.

Um einen Typ hinzuzufügen, klicken Sie im DSL-Explorer mit der rechten Maustaste auf den Stamm des Modells, und klicken Sie dann auf Neuen externen Typ hinzufügen. Legen Sie im Eigenschaftenfenster den Namen auf Color und den Namespace auf System.Drawing fest. Dieser Typ wird nun im DSL-Explorer unter Domänentypen angezeigt. Sie können ihn immer auswählen, wenn Sie den Typ einer Domäneneigenschaft festlegen.

Anpassen der DSL

Mit den hier beschriebenen Verfahren können Sie schnell eine DSL mit einer Diagrammdarstellung, einem lesbaren XML-Format und den grundlegenden Tools erstellen, mit denen Code und andere Artefakte generiert werden.

Die DSL-Definition kann auf zwei Arten erweitert werden:

  1. Optimieren Sie die DSL, indem Sie weitere Features in der DSL-Definition verwenden. Sie können beispielsweise ein einzelnes Konnektorwerkzeug erstellen, das verschiedene Typen von Konnektoren generieren kann, und Sie können die Regeln steuern, nach denen beim Löschen eines Elements auch verwandte Elemente gelöscht werden. Diese Verfahren bestehen meist im Festlegen von Werten in der DSL-Definition. Manche erfordern auch einige Zeilen Programmcode.

    Weitere Informationen finden Sie unter Anpassen und Erweitern von domänenspezifischen Sprachen.

  2. Erweitern Sie Ihre Modellierungstools mit Programmcode, um kompliziertere Effekte zu erzielen. So können Sie z. B. Menübefehle erstellen, die das Modell ändern, und Sie können Tools erstellen, in denen zwei oder mehr DSLs integriert sind. 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.

Ändern der DSL-Definition

Wenn Sie ein Element in einer DSL-Definition erstellen, werden viele Standardwerte automatisch festgelegt. Diese Werte können Sie anschließend ändern. Dies vereinfacht die Entwicklung einer DSL und ermöglicht gleichzeitig wirkungsvolle Anpassungen.

Wenn Sie beispielsweise eine Form einem Element zuordnen, wird der Pfad des übergeordneten Elements der Zuordnung automatisch entsprechend der einbettenden Beziehung der Domänenklasse festgelegt. Wenn Sie die einbettende Beziehung später ändern, wird der Pfad des übergeordneten Elements nicht automatisch geändert.

Daher sollten Sie damit rechnen, dass nach einer Änderung von Beziehungen in der DSL-Definition häufig Fehler gemeldet werden, wenn Sie die Definition speichern oder "Alle Vorlagen transformieren" verwenden. Die meisten dieser Fehler sind leicht zu beheben. Doppelklicken Sie auf den Fehlerbericht, um den Ort des Fehlers zu ermitteln.

Weitere Informationen finden Sie außerdem unter Ändern des Namespace einer domänenspezifischen Sprache.

Problembehandlung

In der folgenden Tabelle sind einige der häufigsten Probleme, die beim Entwurf einer DSL auftreten, zusammen mit ihrer Lösung aufgeführt. Weitere Ratschläge finden Sie im Forum zur Erweiterbarkeit von Visualisierungstools.

Problem Vorschlag
Die Änderungen, die ich an der DSL-Definition vorgenommen habe, wirken sich nicht aus. Klicken Sie auf der Symbolleiste im Projektmappen-Explorer auf Alle Vorlagen transformieren, und erstellen Sie dann die Projektmappe neu.
Formen zeigen statt des Eigenschaftenwerts den Namen eines Decorator-Elements an. Richten Sie die Decorator-Zuordnung ein. Klicken Sie im DSL-Definitionsdiagramm auf die Diagrammelementzuordnung (die graue Linie zwischen der Domänenklasse und der Formklasse).

Öffnen Sie das Fenster DSL-Details. Falls es nicht angezeigt wird, zeigen Sie im Menü „Ansicht“ auf Weitere Fenster, und klicken Sie dann auf DSL-Details.

Klicken Sie auf die Registerkarte Decoratorzuordnungen. Wählen Sie den Namen des Decorator-Elements aus. Vergewissern Sie sich, dass das Kontrollkästchen daneben aktiviert ist. Wählen Sie unter Anzeigeeigenschaft den Namen einer Domäneneigenschaft aus.

Weitere Informationen finden Sie unter Formen im Diagramm.
Ich kann in DSL-Explorer keine Auflistung hinzufügen. Zum Beispiel gibt es beim Rechtsklick auf "Werkzeuge" keinen "Tool hinzufügen"-Befehl im Menü.

Ich kann im Explorer für meine DSL kein Element zu einer Liste hinzufügen.
Klicken Sie mit der rechten Maustaste auf das Element über dem Knoten, den Sie testen. Wenn Sie etwas zu einer Liste hinzufügen möchten, befindet sich der Befehl zum Hinzufügen nicht im Listenknoten, sondern in seinem Besitzer.
Ich habe eine Domänenklasse erstellt, aber ich kann im Explorer der Sprache keine Instanzen erstellen. Jede Domänenklasse mit Ausnahme des Stamms muss Ziel einer einbettenden Beziehung sein.
Im Explorer für meine DSL werden die Elemente nur mit ihren Typennamen angezeigt. Wählen Sie in der DSL-Definition eine Domäneneigenschaft der Klasse aus, und legen Sie im Eigenschaftenfenster Ist Elementname auf TRUE fest.
Meine DSL wird immer im XML-Editor geöffnet. Das kann an einem Fehler beim Lesen der Datei liegen. Nachdem Sie den Fehler behoben haben, müssen Sie den Editor explizit als Ihren DSL-Designer zurücksetzen.

Klicken Sie mit der rechten Maustaste auf das Projektelement, klicken Sie auf Öffnen mit, und wählen Sie IhreSprache-Designer (Standard) aus.
Der Werkzeugkasten meiner DSL wird nicht angezeigt, nachdem ich die Assemblynamen geändert habe. Überprüfen und Aktualisieren Sie DslPackage\GeneratedCode\Package.tt. Weitere Informationen finden Sie unter Ändern des Namespace einer domänenspezifischen Sprache.
Der Werkzeugkasten meiner DSL wird nicht angezeigt, obwohl ich die Assemblynamen nicht geändert habe.

Oder es wird in einem Meldungsfeld gemeldet, dass eine Erweiterung nicht geladen werden konnte.
Setzen Sie die experimentelle Instanz zurück, und erstellen Sie die Projektmappe neu.

1. Erweitern Sie im Windows-Startmenü unter Alle Programme zunächst Visual Studio SDK und anschließend Tools, und klicken Sie dann auf Experimentelle Instanz von Microsoft Visual Studio zurücksetzen.
2. Klicken Sie im Menü Build auf Projektmappe neu erstellen.