Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Abschnitt wird gezeigt, wie Sie benutzerdefinierten Code verwenden, um auf ein Modell in einer domänenspezifischen Sprache (DSL) zuzugreifen, zu ändern oder zu erstellen.
Kontext zum Schreiben von Code für ein DSL
Es gibt mehrere Kontexte, in denen Sie Code schreiben können, der mit einem DSL funktioniert:
Benutzerdefinierte Befehle. Sie können einen Befehl erstellen, den Benutzer aufrufen können, indem Sie mit der rechten Maustaste auf das Diagramm klicken und das Modell ändern. Weitere Informationen finden Sie unter So fügen Sie einen Befehl zum Kontextmenü hinzu.
Validierung. Sie können Code schreiben, der überprüft, ob sich das Modell in einem korrekten Zustand befindet. Weitere Informationen finden Sie unter "Überprüfung in einer Domain-Specific Sprache".
Überschreiben des Standardverhaltens. Sie können viele Aspekte des Codes ändern, der von DslDefinition.dsl generiert wird. Weitere Informationen finden Sie unter Außerkraftsetzung und Erweitern der generierten Klassen.
Texttransformation. Sie können Textvorlagen schreiben, die Code enthalten, der auf ein Modell zugreift, und eine Textdatei generiert, z. B. zum Generieren von Programmcode. Weitere Informationen finden Sie unter Generieren von Code aus einer Domain-Specific Sprache.
Andere Visual Studio-Erweiterungen. Sie können separate VSIX-Erweiterungen schreiben, die Modelle lesen und ändern. Weitere Informationen finden Sie unter So öffnen Sie ein Modell aus einer Datei im Programmcode
In-Memory Store
Instanzen der Klassen, die Sie in DslDefinition.dsl definieren, werden in einer Datenstruktur gespeichert, die alsIn-Memory Store (IMS) oder Store bezeichnet wird. Diejenigen Klassen, die Sie in einem DSL definieren, nehmen immer einen Store als Argument für den Konstruktor. Wenn Ihr DSL z. B. eine Klasse mit dem Namen Example:
Example element = new Example (theStore);
Das Aufbewahren von Objekten im Store bietet mehrere Vorteile im Vergleich zur Speicherung als gewöhnliche Objekte.
Transaktionen. Sie können eine Reihe verwandter Änderungen in eine Transaktion gruppieren:
using (Transaction t = store.TransactionManager.BeginTransaction("updates")) { // make several changes to Store elements here t.Commit(); }Wenn während der Änderungen eine Ausnahme auftritt, sodass das Endgültige
Commit()nicht ausgeführt wird, wird der Store auf den vorherigen Zustand zurückgesetzt. Mit diesem Ansatz können Sie sicherstellen, dass Fehler das Modell nicht in einem inkonsistenten Zustand belassen. Weitere Informationen finden Sie unter Navigieren und Aktualisieren eines Modells im Programmcode.Binäre Beziehungen. Wenn Sie eine Beziehung zwischen zwei Klassen definieren, verfügen Instanzen an beiden Enden über eine Eigenschaft, die zum anderen Ende navigiert. Die beiden Enden werden immer synchronisiert. Wenn Sie beispielsweise eine Elternschaftsbeziehung mit Rollen namens "Eltern und Kinder" definieren, können Sie Folgendes schreiben:
John.Children.Add(Mary)Beide der folgenden Ausdrücke sind jetzt wahr:
John.Children.Contains(Mary)Mary.Parents.Contains(John)Sie können auch den gleichen Effekt erzielen, indem Sie Folgendes schreiben:
Mary.Parents.Add(John)Weitere Informationen finden Sie unter Navigieren und Aktualisieren eines Modells im Programmcode.
Regeln und Ereignisse. Sie können Regeln definieren, die ausgelöst werden, wenn bestimmte Änderungen vorgenommen werden. Regeln werden z. B. verwendet, um Formen im Diagramm mit den Modellelementen auf dem neuesten Stand zu halten. Weitere Informationen finden Sie unter Reagieren auf und Weitergeben von Änderungen.
Serialisierung. Der Store stellt eine Standardmethode zum Serialisieren der darin enthaltenen Objekte in eine Datei bereit. Sie können die Regeln für die Serialisierung und Deserialisierung anpassen. Weitere Informationen finden Sie unter Anpassen der Dateispeicher- und XML-Serialisierung.