Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
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:
Aangepaste opdrachten. U kunt een opdracht maken die gebruikers kunnen aanroepen door met de rechtermuisknop op het diagram te klikken en het model te wijzigen. Zie Een opdracht toevoegen aan het snelmenu voor meer informatie.
Validering. U kunt code schrijven waarmee wordt gecontroleerd of het model de juiste status heeft. Zie Validatie in een Domain-Specific Taal voor meer informatie.
Het standaardgedrag overschrijven. U kunt veel aspecten van de code wijzigen die wordt gegenereerd op basis van DslDefinition.dsl. Zie De gegenereerde klassen overschrijven en uitbreiden voor meer informatie.
Teksttransformatie. U kunt tekstsjablonen schrijven die code bevatten die toegang hebben tot een model en een tekstbestand genereren, bijvoorbeeld om programmacode te genereren. Zie Code genereren op basis van een Domain-Specific Taal voor meer informatie.
Andere Visual Studio-extensies. U kunt afzonderlijke VSIX-extensies schrijven die modellen lezen en wijzigen. Zie How to: Open a Model from File in Program Code (Een model openen vanuit een bestand in Programmacode) voor meer informatie
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.