Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V této části se dozvíte, jak pomocí vlastního kódu přistupovat, upravovat nebo vytvářet model v jazyce specifickém pro doménu (DSL).
Kontext pro psaní kódu pro DSL
Existuje několik kontextů, ve kterých můžete napsat kód, který funguje s DSL:
Vlastní příkazy. Můžete vytvořit příkaz, který můžou uživatelé vyvolat kliknutím pravým tlačítkem myši na diagram a úpravou modelu. Další informace naleznete v tématu Jak na to: Přidání příkazu do místní nabídky.
Validace. Můžete napsat kód, který ověří, že je model ve správném stavu. Další informace naleznete v tématu Ověřování v jazyce Domain-Specific.
Přepsání výchozího chování Můžete upravit mnoho aspektů kódu, který je generován z DslDefinition.dsl. Další informace naleznete v tématu Přepsání a rozšíření vygenerované třídy.
Transformace textu. Můžete psát textové šablony, které obsahují kód, který přistupuje k modelu a generuje textový soubor, například pro generování kódu programu. Další informace naleznete v tématu Generování kódu z jazyka Domain-Specific.
Další rozšíření sady Visual Studio Můžete napsat samostatná rozšíření VSIX, která čtou a upravují modely. Další informace naleznete v tématu Postupy: Otevření modelu ze souboru v kódu programu
In-Memory Store
Instance tříd, které definujete v DslDefinition.dsl jsou uloženy v datové struktuře nazývané In-Memory Store (IMS) nebo Store. Třídy, které definujete v DSL, vždy přebírají úložiště jako argument konstruktoru. Pokud například dsl definuje třídu s názvem Example:
Example element = new Example (theStore);
Uchovávání objektů v úložišti, spíše než jako obyčejné objekty, poskytuje několik výhod.
Transakce. Do transakce můžete seskupit řadu souvisejících změn:
using (Transaction t = store.TransactionManager.BeginTransaction("updates")) { // make several changes to Store elements here t.Commit(); }Pokud během změn dojde k výjimce, takže se neprovedou konečné
Commit()změny, úložiště se resetuje do předchozího stavu. Tento přístup vám pomůže zajistit, aby chyby nezanechaly model v nekonzistentním stavu. Další informace naleznete v tématu Navigace a aktualizace modelu v kódu programu.Binární relace. Pokud definujete relaci mezi dvěma třídami, instance na obou koncích mají vlastnost, která přejde na druhý konec. Oba konce jsou vždy synchronizovány. Pokud například definujete vztah rodičovství s rolemi pojmenovanými Rodiče a Děti, můžete napsat:
John.Children.Add(Mary)Oba následující výrazy jsou teď pravdivé:
John.Children.Contains(Mary)Mary.Parents.Contains(John)Stejný účinek můžete dosáhnout také napsáním:
Mary.Parents.Add(John)Další informace naleznete v tématu Navigace a aktualizace modelu v kódu programu.
Pravidla a události. Můžete definovat pravidla, která se aktivují při každém provedení zadaných změn. Pravidla se používají například k udržování obrazců v diagramu v aktualizovaném stavu s prvky modelu, které jsou přítomné. Další informace naleznete v tématu Reakce na a šíření změn.
Serializace. Store poskytuje standardní způsob, jak serializovat objekty, které obsahuje do souboru. Pravidla pro serializaci a deserializaci můžete přizpůsobit. Další informace naleznete v tématu Přizpůsobení úložiště souborů a serializace XML.