Delen via


Code schrijven om een domeinspecifieke taal aan te passen

In deze sectie wordt beschreven hoe u aangepaste code gebruikt om toegang te krijgen tot, te wijzigen of een model te maken in een domeinspecifieke taal (DSL).

Context voor het schrijven van code voor een DSL

Er zijn verschillende contexten waarin u code kunt schrijven die werkt met een DSL:

In-Memory Store

Exemplaren van de klassen die u in DslDefinition.dsl definieert, worden bewaard in een gegevensstructuur met de naam In-Memory Store (IMS) of Store. De klassen die u in een DSL definieert, nemen altijd een Store als argument voor de constructor. Als uw DSL bijvoorbeeld een klasse definieert met de naam Example:

Example element = new Example (theStore);

Het bewaren van objecten in de Store, in plaats van gewoon als gewone objecten, biedt verschillende voordelen.

  • Transacties. U kunt een reeks gerelateerde wijzigingen groeperen in een transactie:

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

    Als er een uitzondering optreedt tijdens de wijzigingen, zodat de finale Commit() niet wordt uitgevoerd, wordt de Store opnieuw ingesteld op de vorige status. Deze aanpak helpt u ervoor te zorgen dat fouten het model niet in een inconsistente status laten staan. Zie Navigeren en bijwerken van een model in Programmacode voor meer informatie.

  • Binaire relaties. Als u een relatie tussen twee klassen definieert, hebben exemplaren aan beide uiteinden een eigenschap die naar het andere uiteinde navigeert. De twee uiteinden worden altijd gesynchroniseerd. Als u bijvoorbeeld een relatie tussen ouders en kinderen definieert met de rollen Ouders en Kinderen, kunt u het volgende schrijven:

    John.Children.Add(Mary)

    Beide van de volgende expressies zijn nu waar:

    John.Children.Contains(Mary)

    Mary.Parents.Contains(John)

    U kunt ook hetzelfde effect bereiken door het volgende te schrijven:

    Mary.Parents.Add(John)

    Zie Navigeren en bijwerken van een model in Programmacode voor meer informatie.

  • Regels en gebeurtenissen. U kunt regels definiĆ«ren die worden geactiveerd wanneer opgegeven wijzigingen worden aangebracht. Regels worden bijvoorbeeld gebruikt om vormen in het diagram bijgewerkt te houden met de modelelementen die ze presenteren. Zie Reageren op en doorgeven van wijzigingen voor meer informatie.

  • Serialisatie. De Store biedt een standaardmethode voor het serialiseren van de objecten die het bevat in een bestand. U kunt de regels voor serialiseren en deserialiseren aanpassen. Zie File Storage en XML-serialisatie aanpassen voor meer informatie.