Sdílet prostřednictvím


Napsání kódu pro přizpůsobení jazyka specifického pro doménu

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:

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.