Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Det här avsnittet visar hur du använder anpassad kod för att komma åt, ändra eller skapa en modell på ett domänspecifikt språk (DSL).
Kontext för att skriva kod för en DSL
Det finns flera kontexter där du kan skriva kod som fungerar med en DSL:
Anpassade kommandon. Du kan skapa ett kommando som användarna kan anropa genom att högerklicka på diagrammet och som kan ändra modellen. Mer information finns i Så här lägger du till ett kommando på snabbmenyn.
Validering. Du kan skriva kod som verifierar att modellen är i rätt tillstånd. Mer information finns i Validering på ett Domain-Specific språk.
Åsidosätta standardbeteendet. Du kan ändra många aspekter av koden som genereras från DslDefinition.dsl. Mer information finns i Åsidosätta och utöka de genererade klasserna.
Texttransformeringen. Du kan skriva textmallar som innehåller kod som kommer åt en modell och genererar en textfil, till exempel för att generera programkod. Mer information finns i Generera kod från ett domänspecifikt språk.
Andra Visual Studio-tillägg. Du kan skriva separata VSIX-tillägg som läser och ändrar modeller. Mer information finns i How to: Open a Model from File in Program Code (Så här öppnar du en modell från en fil i Programkod)
In-Memory Store
Instanser av de klasser som du definierar i DslDefinition.dsl lagras i en datastruktur som kallas In-Memory Store (IMS) eller Store. De klasser som du definierar i en DSL tar alltid en Store som ett argument till konstruktorn. Om din DSL till exempel definierar en klass med namnet Example:
Example element = new Example (theStore);
Att behålla objekt i Store, i stället för precis som vanliga objekt, ger flera fördelar.
Transaktioner. Du kan gruppera en serie relaterade ändringar i en transaktion:
using (Transaction t = store.TransactionManager.BeginTransaction("updates")) { // make several changes to Store elements here t.Commit(); }Om ett undantag inträffar under ändringarna, vilket gör att det sista
Commit()inte utförs, återställs butiken till sitt tidigare tillstånd. Den här metoden hjälper dig att se till att felen inte lämnar modellen i ett inkonsekvent tillstånd. Mer information finns i Navigera och uppdatera en modell i Programkod.Binära relationer. Om du definierar en relation mellan två klasser har instanser i båda ändar en egenskap som navigerar till den andra änden. De två ändarna synkroniseras alltid. Om du till exempel definierar en föräldraskapsrelation med roller med namnet Föräldrar och barn kan du skriva:
John.Children.Add(Mary)Båda följande uttryck är nu sanna:
John.Children.Contains(Mary)Mary.Parents.Contains(John)Du kan också uppnå samma effekt genom att skriva:
Mary.Parents.Add(John)Mer information finns i Navigera och uppdatera en modell i Programkod.
Regler och händelser. Du kan definiera regler som utlöses när angivna ändringar görs. Regler används till exempel för att hålla formerna i diagrammet uppdaterade med de modellelement som de presenterar. Mer information finns i Svara på och sprida ändringar.
Serialisering. Butiken tillhandahåller ett standardiserat sätt att serialisera de objekt som den innehåller till en fil. Du kan anpassa reglerna för serialisering och deserialisering. Mer information finns i Anpassa fillagring och XML-serialisering.