Condividi tramite


Scrivere codice per personalizzare un linguaggio specifico del dominio

Questa sezione illustra come usare codice personalizzato per accedere, modificare o creare un modello in un linguaggio specifico del dominio ( DSL).

Contesto per la scrittura di codice per un linguaggio DSL

Esistono diversi contesti in cui è possibile scrivere codice che funziona con un linguaggio DSL:

In-Memory Store

Le istanze delle classi definite in DslDefinition.dsl vengono mantenute in una struttura di dati denominata In-Memory Store (IMS) o Store. Le classi definite in un linguaggio DSL accettano sempre uno Store come argomento per il costruttore. Ad esempio, se il linguaggio DSL definisce una classe denominata Example:

Example element = new Example (theStore);

Mantenere gli oggetti nello Store, anziché come oggetti ordinari, offre diversi vantaggi.

  • Transazioni. È possibile raggruppare una serie di modifiche correlate in una transazione:

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

    Se si verifica un'eccezione durante le modifiche, in modo che l'ultima Commit() non venga eseguita, lo Store viene reimpostato sullo stato precedente. Questo approccio consente di assicurarsi che gli errori non lascino il modello in uno stato incoerente. Per altre informazioni, vedere Esplorazione e aggiornamento di un modello nel codice del programma.

  • Relazioni binarie. Se si definisce una relazione tra due classi, le istanze a entrambe le estremità hanno una proprietà che consente di navigare verso l'altra estremità. Le due estremità vengono sempre sincronizzate. Ad esempio, se si definisce una relazione di parentità con ruoli denominati Genitori e Figli, è possibile scrivere:

    John.Children.Add(Mary)

    Entrambe le espressioni seguenti sono ora vere:

    John.Children.Contains(Mary)

    Mary.Parents.Contains(John)

    È anche possibile ottenere lo stesso effetto scrivendo:

    Mary.Parents.Add(John)

    Per altre informazioni, vedere Esplorazione e aggiornamento di un modello nel codice del programma.

  • Regole ed eventi. È possibile definire regole che vengono attivate ogni volta che vengono apportate modifiche specificate. Le regole vengono utilizzate, ad esempio, per mantenere aggiornate le forme nel diagramma con gli elementi del modello presenti. Per altre informazioni, vedere Risposta a e propagazione delle modifiche.

  • Serializzazione. Lo Store offre un modo standard per serializzare gli oggetti contenuti in un file. È possibile personalizzare le regole per la serializzazione e la deserializzazione. Per altre informazioni, vedere Personalizzazione dell'archiviazione file e della serializzazione XML.