Escribir código para personalizar lenguajes específicos de dominioWriting Code to Customise a Domain-Specific Language

En esta sección se muestra cómo utilizar código personalizado para acceder, modificar o crear un modelo en un lenguaje específico de dominio.This section shows you how to use custom code to access, modify, or create a model in a domain-specific language.

Hay varios contextos en los que puede escribir código que funcione con un DSL:There are several contexts in which you can write code that works with a DSL:

  • Comandos personalizados.Custom commands. Puede crear un comando que los usuarios pueden invocar con el botón secundario en el diagrama, y que puede modificar el modelo.You can create a command that users can invoke by right-clicking on the diagram, and which can modify the model. Para obtener más información, consulte Cómo: agregar un comando al menú contextual.For more information, see How to: Add a Command to the Shortcut Menu.

  • Validation.Validation. Puede escribir código que comprueba si el modelo está en un estado correcto.You can write code that verifies that the model is in a correct state. Para obtener más información, consulte validación en un lenguaje específico de dominio.For more information, see Validation in a Domain-Specific Language.

  • Invalidar el comportamiento predeterminado.Overriding the default behavior. Puede modificar muchos aspectos del código que se genera a partir de DslDefinition.dsl.You can modify many aspects of the code that is generated from DslDefinition.dsl. Para obtener más información, consulte reemplazar y ampliar las clases generadas.For more information, see Overriding and Extending the Generated Classes.

  • Transformación de texto.Text Transformation. Puede escribir plantillas de texto que contienen código que tiene acceso a un modelo y genera un archivo de texto, por ejemplo, para generar código de programa.You can write text templates that contain code that accesses a model and generates a text file, for example to generate program code. Para obtener más información, consulte generar código desde un lenguaje específico de dominio.For more information, see Generating Code from a Domain-Specific Language.

  • Otras extensiones de Visual Studio.Other Visual Studio extensions. Puede escribir extensiones VSIX independientes que leen y modificar los modelos.You can write separate VSIX extensions that read and modify models. Para obtener más información, vea Cómo: abrir un modelo de archivo en el código de programaFor more information, see How to: Open a Model from File in Program Code

    Instancias de las clases que definen en DslDefinition.dsl se mantienen en una estructura de datos denominada el almacén de datos en memoria (IMS) o almacén.Instances of the classes that you define in DslDefinition.dsl are kept in a data structure called the In-Memory Store (IMS) or Store. Las clases que defina en un DSL siempre toman un almacén como argumento al constructor.The classes you define in a DSL always take a Store as an argument to the constructor. Por ejemplo, si tu DSL define una clase denominada ejemplo:For example, if your DSL defines a class called Example:

    Example element = new Example (theStore);

    mantener los objetos en el almacén (en lugar de los objetos ordinarios simplemente como) ofrece varias ventajas.keeping objects in the Store (instead of just as ordinary objects) provides several benefits.

  • Las transacciones.Transactions. Puede agrupar una serie de cambios relacionados en una transacción:You can group a series of related changes into a transaction:

    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, por lo que no se realiza el Commit() final, el almacén se restablecerá a su estado anterior.If an exception occurs during the changes, so that the final Commit() is not performed, the Store will be reset to its previous state. Esto le ayuda a asegurarse de que los errores no dejar el modelo en un estado incoherente.This helps you to make sure that errors do not leave the model in an inconsistent state. Para obtener más información, consulte navegar y actualizar un modelo de código de programa.For more information, see Navigating and Updating a Model in Program Code.

  • Las relaciones binarias.Binary relationships. Si define una relación entre dos clases, instancias en ambos extremos tienen una propiedad que se desplaza hacia el otro extremo.If you define a relationship between two classes, instances at both ends have a property that navigates to the other end. Los dos extremos siempre están sincronizados.The two ends are always synchronized. Por ejemplo, si define una relación filiación con roles con el nombre de elementos primarios y secundarios, podría escribir:For example, if you define a parenthood relationship with roles named Parents and Children, you could write:

    John.Children.Add(Mary)

    Ahora las dos expresiones siguientes son verdaderas:Both of the following expressions are now true:

    John.Children.Contains(Mary)

    Mary.Parents.Contains(John)

    También podría conseguir el mismo efecto escribiendo:You could also achieve the same effect by writing:

    Mary.Parents.Add(John)

    Para obtener más información, consulte navegar y actualizar un modelo de código de programa.For more information, see Navigating and Updating a Model in Program Code.

  • Reglas y eventos.Rules and Events. Puede definir reglas que se activan cada vez que se realizan cambios especificados.You can define rules that fire whenever specified changes are made. Por ejemplo, las reglas se usan para mantener al día con los elementos del modelo que presenta las formas en el diagrama.Rules are used, for example, to keep shapes on the diagram up to date with the model elements they present. Para obtener más información, consulte responder a y propagar los cambios.For more information, see Responding to and Propagating Changes.

  • Serialización.Serialization. El almacén proporciona un método estándar para serializar los objetos que contiene a un archivo.The Store provides a standard way to serialize the objects it contains to a file. Puede personalizar las reglas para serializar y deserializar.You can customize the rules for serializing and deserializing. Para obtener más información, consulte personalizar el almacenamiento de archivos y serialización XML.For more information, see Customizing File Storage and XML Serialization.

Vea tambiénSee Also

Personalizar y ampliar lenguajes específicos de dominioCustomizing and Extending a Domain-Specific Language