Compartir vía


Escribir código para personalizar un lenguaje específico del dominio

En esta sección se muestra cómo usar código personalizado para acceder, modificar o crear un modelo en un lenguaje específico del dominio (DSL).

Contexto para escribir código para un DSL

Hay varios contextos en los que puede escribir código que funciona con un DSL:

In-Memory Store

Las instancias de las clases que defina en DslDefinition.dsl se conservan en una estructura de datos denominada In-Memory Store (IMS) o Store. Las clases que defina en un DSL siempre toman una Store como argumento para el constructor. Por ejemplo, si el DSL define una clase denominada Example:

Example element = new Example (theStore);

Mantener los objetos en la Tienda, en lugar de como objetos ordinarios, ofrece varias ventajas.

  • Transacciones. Puede agrupar una serie de cambios relacionados en una transacción:

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

    Si se produce una excepción durante los cambios, de manera que no se ejecute la operación final Commit(), el almacén se restablece a su estado anterior. Este enfoque le ayuda a asegurarse de que los errores no dejan el modelo en un estado incoherente. Para obtener más información, vea Navegar y actualizar un modelo en código de programa.

  • Relaciones binarias. Si define una relación entre dos clases, las instancias de ambos extremos tienen una propiedad que navega al otro extremo. Los dos extremos siempre se sincronizan. Por ejemplo, si define una relación de parentesco con roles denominados Padres e Hijos, puede escribir:

    John.Children.Add(Mary)

    Ahora se cumplen las dos expresiones siguientes:

    John.Children.Contains(Mary)

    Mary.Parents.Contains(John)

    También puede lograr el mismo efecto escribiendo:

    Mary.Parents.Add(John)

    Para obtener más información, vea Navegar y actualizar un modelo en código de programa.

  • Reglas y eventos. Puede definir reglas que se activen cada vez que se realicen cambios especificados. Las reglas se usan, por ejemplo, para mantener las formas en el diagrama actualizadas con los elementos del modelo que presentan. Para obtener más información, vea Responder a los cambios y propagarlos.

  • Serialización. Store proporciona una manera estándar de serializar los objetos que contiene en un archivo. Puede personalizar las reglas para serializar y deserializar. Para obtener más información, consulte Personalización del almacenamiento de archivos y la serialización XML.