Compartilhar via


Escrever código para personalizar um idioma específico do domínio

Esta seção mostra como usar código personalizado para acessar, modificar ou criar um modelo em uma DSL (linguagem específica do domínio).

Contexto para escrever código para uma DSL

Há vários contextos em que você pode escrever um código que funciona com uma DSL:

Armazenamento em Memória

As instâncias das classes que você define em DslDefinition.dsl são mantidas em uma estrutura de dados chamada Repositório na Memória (IMS) ou Repositório. As classes que você define em uma DSL sempre aceitam um Store como argumento para o construtor. Por exemplo, se a DSL definir uma classe chamada Example:

Example element = new Example (theStore);

Manter objetos na Loja, em vez de apenas como objetos comuns, oferece vários benefícios.

  • Transações. Você pode agrupar uma série de alterações relacionadas em uma transação:

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

    Se ocorrer uma exceção durante as alterações, de forma que a finalização Commit() não seja executada, o Repositório será redefinido para o estado anterior. Essa abordagem ajuda você a garantir que os erros não deixem o modelo em um estado inconsistente. Para obter mais informações, consulte Navegando e atualizando um modelo no código do programa.

  • Relações binárias. Se você definir uma relação entre duas classes, as instâncias em ambas as extremidades terão uma propriedade que navega para a outra extremidade. Os dois pontos estão sempre sincronizados. Por exemplo, se você definir uma relação de paternidade com funções chamadas Pais e Filhos, você poderá escrever:

    John.Children.Add(Mary)

    As duas expressões a seguir agora são verdadeiras:

    John.Children.Contains(Mary)

    Mary.Parents.Contains(John)

    Você também pode obter o mesmo efeito escrevendo:

    Mary.Parents.Add(John)

    Para obter mais informações, consulte Navegando e atualizando um modelo no código do programa.

  • Regras e eventos. Você pode definir regras que são acionadas sempre que forem feitas alterações especificadas. As regras são usadas, por exemplo, para manter as formas no diagrama atualizadas com os elementos de modelo que elas apresentam. Para mais informações, consulte Responder e Propagar Alterações.

  • Serialização. A Loja fornece uma maneira padrão de serializar os objetos que ela contém para um arquivo. Você pode personalizar as regras para serializar e desserializar. Para obter mais informações, consulte Personalizando o Armazenamento de Arquivos e a Serialização XML.