Écrire du Code pour personnaliser un langage spécifique à un domaineWrite Code to Customize a Domain-Specific Language

Cette section vous montre comment utiliser un code personnalisé pour accéder, modifier ou créer un modèle dans un langage spécifique à un domaine.This section shows you how to use custom code to access, modify, or create a model in a domain-specific language.

Il existe plusieurs contextes dans lesquels vous pouvez écrire du code qui fonctionne avec une DSL :There are several contexts in which you can write code that works with a DSL:

Instances des classes que vous définissez dans DslDefinition.dsl sont conservés dans une structure de données appelée la magasin en mémoire (IMS) ou magasin.Instances of the classes that you define in DslDefinition.dsl are kept in a data structure called the In-Memory Store (IMS) or Store. Les classes que vous définissez dans une DSL toujours prennent un magasin en tant qu’argument au constructeur.The classes you define in a DSL always take a Store as an argument to the constructor. Par exemple, si votre DSL définit une classe appelée exemple :For example, if your DSL defines a class called Example:

Example element = new Example (theStore);

conservation des objets dans le magasin (au lieu d’objets simplement comme ordinaires) offre plusieurs avantages.keeping objects in the Store (instead of just as ordinary objects) provides several benefits.

  • Transactions.Transactions. Vous pouvez regrouper une série de modifications connexes dans une transaction :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 une exception se produit pendant les modifications, afin que la dernière Commit() n’est pas effectuée, le magasin réinitialisera à son état précédent.If an exception occurs during the changes, so that the final Commit() is not performed, the Store will be reset to its previous state. Cela vous permet de vous assurer que les erreurs ne laissent pas le modèle dans un état incohérent.This helps you to make sure that errors do not leave the model in an inconsistent state. Pour plus d’informations, consultez navigation et la mise à jour d’un modèle de Code de programme.For more information, see Navigating and Updating a Model in Program Code.

  • Les relations binaires.Binary relationships. Si vous définissez une relation entre deux classes, instances aux deux extrémités ont une propriété qui accède à l’autre extrémité.If you define a relationship between two classes, instances at both ends have a property that navigates to the other end. Les deux extrémités sont toujours synchronisées.The two ends are always synchronized. Par exemple, si vous définissez une relation à la parenté avec des rôles nommés Parents et enfants, vous pouvez écrire :For example, if you define a parenthood relationship with roles named Parents and Children, you could write:

    John.Children.Add(Mary)

    Maintenant, les deux expressions suivantes sont vraies :Both of the following expressions are now true:

    John.Children.Contains(Mary)

    Mary.Parents.Contains(John)

    Vous pouvez également obtenir le même effet en écrivant :You could also achieve the same effect by writing:

    Mary.Parents.Add(John)

    Pour plus d’informations, consultez navigation et la mise à jour d’un modèle de Code de programme.For more information, see Navigating and Updating a Model in Program Code.

  • Les règles et les événements.Rules and Events. Vous pouvez définir des règles qui se déclenchent chaque fois que les modifications sont apportées.You can define rules that fire whenever specified changes are made. Les règles sont utilisées, par exemple, pour maintenir à jour avec les éléments de modèle qu’elles présentent les formes sur le diagramme.Rules are used, for example, to keep shapes on the diagram up to date with the model elements they present. Pour plus d’informations, consultez réponse aux et propager les modifications.For more information, see Responding to and Propagating Changes.

  • Sérialisation.Serialization. Le magasin est un moyen standard pour sérialiser les objets qu’il contient dans un fichier.The Store provides a standard way to serialize the objects it contains to a file. Vous pouvez personnaliser les règles pour la sérialisation et la désérialisation.You can customize the rules for serializing and deserializing. Pour plus d’informations, consultez personnalisation de stockage de fichier et la sérialisation XML.For more information, see Customizing File Storage and XML Serialization.

Voir aussiSee Also