Udostępnij przez


Pisanie kodu w celu dostosowania języka specyficznego dla domeny

W tej sekcji pokazano, jak używać kodu niestandardowego do uzyskiwania dostępu do, modyfikowania lub tworzenia modelu w języku specyficznym dla domeny (DSL).

Kontekst do pisania kodu dla języka DSL

Istnieje kilka kontekstów, w których można napisać kod, który działa z językiem DSL:

In-Memory Store

Wystąpienia klas zdefiniowanych w pliku DslDefinition.dsl są przechowywane w strukturze danych o nazwie In-Memory Store (IMS) lub Store. Klasy zdefiniowane w języku DSL zawsze przyjmują obiekt Store jako argument konstruktora. Jeśli na przykład język DSL definiuje klasę o nazwie Example:

Example element = new Example (theStore);

Utrzymywanie obiektów w magazynie, zamiast jako zwykłe obiekty, zapewnia kilka korzyści.

  • Transakcje. Serię powiązanych zmian można zgrupować w transakcji:

    using (Transaction t = store.TransactionManager.BeginTransaction("updates"))
    {
      // make several changes to Store elements here
      t.Commit();
    }
    

    Jeśli podczas zmian wystąpi wyjątek, i finalizacja Commit() nie zostanie wykonana, Store zostanie zresetowany do poprzedniego stanu. Takie podejście pomaga upewnić się, że błędy nie pozostawiają modelu niespójnym. Aby uzyskać więcej informacji, zobacz Nawigowanie i aktualizowanie modelu w kodzie programu.

  • Relacje binarne. Jeśli zdefiniujesz relację między dwiema klasami, instancje na obu końcach mają właściwość, która odwołuje się do drugiego końca. Dwa końce są zawsze synchronizowane. Jeśli na przykład zdefiniujesz relację rodzicielstwa z rolami o nazwie Rodzice i Dzieci, możesz napisać:

    John.Children.Add(Mary)

    Oba następujące wyrażenia są teraz prawdziwe:

    John.Children.Contains(Mary)

    Mary.Parents.Contains(John)

    Możesz również osiągnąć ten sam efekt, pisząc:

    Mary.Parents.Add(John)

    Aby uzyskać więcej informacji, zobacz Nawigowanie i aktualizowanie modelu w kodzie programu.

  • Reguły i zdarzenia. Można zdefiniować reguły uruchamiane za każdym razem, gdy zostaną wprowadzone określone zmiany. Reguły są używane, na przykład, aby zachować aktualność kształtów na diagramie z prezentowanymi elementami modelu. Aby uzyskać więcej informacji, zobacz Odpowiadanie na zmiany i propagowanie ich.

  • Serializacja. Magazyn zapewnia standardowy sposób serializacji obiektów, które są w nim zawarte, do pliku. Możesz dostosować reguły serializacji i deserializacji. Aby uzyskać więcej informacji, zobacz Dostosowywanie magazynu plików i serializacji XML.