Udostępnij za pośrednictwem


Pisanie kodu, aby dostosować język specyficzne dla domeny

W tej sekcji przedstawiono sposób użycia kodu niestandardowego do dostępu, zmodyfikować lub utworzyć model w języku specyficzne dla domeny.

Istnieje wiele kontekstów, w których można napisać kod, który działa z modemu DSL:

  • Polecenia niestandardowe. Można utworzyć polecenia, że użytkownicy mogą być wywoływane przez kliknięcie prawym przyciskiem myszy na diagramie i które można modyfikować modelu.Aby uzyskać więcej informacji, zobacz Jak: Dodawanie polecenia do Menu skrótów.

  • Sprawdzanie poprawności. Można napisać kod, który sprawdza, że model jest w odpowiednim stanie.Aby uzyskać więcej informacji, zobacz Sprawdzanie poprawności w języku specyficzne dla domeny.

  • Zastępowanie zachowania domyślnego. Można zmodyfikować wiele aspektów kod, który jest generowany na podstawie DslDefinition.dsl.Aby uzyskać więcej informacji, zobacz Zastępowanie i rozszerzanie klas generowanych.

  • Transformacja tekstu. Można napisać tekst szablony, które zawierają kod, który uzyskuje dostęp do modelu i generuje plik tekstowy, na przykład do generowania kodu programu.Aby uzyskać więcej informacji, zobacz Generowanie kodu w języku specyficzne dla domeny.

  • Inne rozszerzenia programu Visual Studio. Można napisać oddzielnych rozszerzenia VSIX, które odczytywać i modyfikować modeli.Aby uzyskać więcej informacji zobaczJak: Otwórz Model z pliku kodu programu

Wystąpienia klas, które definiują w DslDefinition.dsl są przechowywane w strukturze danych, nazywane Magazyn W pamięci (ISP) lub Magazyn.Klas, które można zdefiniować w DSL zawsze podjąć magazynu jako argument do konstruktora.Na przykład, jeśli modem DSL definiuje klasę o nazwie przykład:

Example element = new Example (theStore);

Przechowywanie obiektów w magazynie (zamiast po prostu jako zwykłe obiektów) zapewnia kilka korzyści.

  • Transakcje.Można grupować serii powiązanych zmian do transakcji:

    using (Transaction t = store.TransactionManager.BeginTransaction("updates"))

    {

    // make several changes to Store elements here

    t.Commit();

    }

    Jeśli wystąpi wyjątek podczas zmiany, tak aby końcowe Commit() nie jest wykonywane, magazynu zostaną zresetowane do poprzedniego stanu.Pomaga upewnić się, że błędy nie opuszczą modelu w niespójnym stanie.Aby uzyskać więcej informacji, zobacz Przeglądanie i aktualizowanie modelu w kod programu.

  • Relacje dwuelementowe.W przypadku zdefiniowania relacji między dwoma klasami, wystąpienia na obu końcach mają właściwość, która przechodzi do drugiego końca.Dwa końce są zawsze zsynchronizowane.Na przykład jeśli zdefiniować relację rodzicielstwa z rolami o nazwie rodziców i dzieci, można napisać:

    John.Children.Add(Mary)

    Oba z następujących wyrażeń, teraz są spełnione:

    John.Children.Contains(Mary)

    Mary.Parents.Contains(John)

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

    Mary.Parents.Add(John)

    Aby uzyskać więcej informacji, zobacz Przeglądanie i aktualizowanie modelu w kod programu.

  • Zasady i zdarzenia.Można zdefiniować reguły, które ognia w każdym przypadku, gdy określonych zmian.Zasady są używane na przykład, aby zachować aktualne elementy modelu, jakie stanowią kształty na diagramie.Aby uzyskać więcej informacji, zobacz Reagowanie na i propagowanie zmian.

  • Serializacja.Magazyn, udostępnia standardowy sposób serializować obiektów, które zawiera plik.Można dostosować reguły do szeregowania i deserializacji.Aby uzyskać więcej informacji, zobacz Dostosowywanie pliku magazynu i serializacji XML.

Zobacz też

Koncepcje

Dostosowywanie i rozszerzanie języka specyficzne dla domeny