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:

Magazyn w pamięci

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ą magazyn 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, a nie tak samo zwykłych obiektów, 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 wystąpi wyjątek podczas zmian, aby finał Commit() nie został wykonany, sklep zostanie zresetowany do poprzedniego stanu. Takie podejście pomaga upewnić się, że błędy nie opuszczają modelu w stanie 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, wystąpienia na obu końcach mają właściwość, która przechodzi 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 zawiera w pliku. Możesz dostosować reguły serializacji i deserializacji. Aby uzyskać więcej informacji, zobacz Dostosowywanie magazynu plików i serializacji XML.