À propos des langages spécifiques à un domaineAbout Domain-Specific Languages

Contrairement à une langue à usage général, tel que c# ou UML, un langage spécifique à un domaine (DSL) est conçu pour exprimer des instructions dans un espace de problème particulier, ou un domaine.Unlike a general-purpose language such as C# or UML, a domain-specific language (DSL) is designed to express statements in a particular problem space, or domain.

DSL connus inclure des expressions régulières et SQL.Well-known DSLs include regular expressions and SQL. Chaque DSL est préférable à une langue à usage général pour décrire les opérations sur les chaînes de texte ou une base de données, mais bien pire permettant de décrire des idées qui sont en dehors de sa propre étendue.Each DSL is much better than a general-purpose language for describing operations on text strings or a database, but much worse for describing ideas that are outside its own scope. Des branches ont également leurs propres DSL.Individual industries also have their own DSLs. Par exemple, dans le secteur des télécommunications, appelez description langues sont couramment utilisées pour spécifier la séquence d’états dans un appel téléphonique et dans l’air de secteur du voyage une norme que DSL est utilisé pour décrire les réservations de vol.For example, in the telecommunications industry, call description languages are widely used to specify the sequence of states in a telephone call, and in the air travel industry a standard DSL is used to describe flight bookings.

Votre entreprise et votre projet traitent également jeux spéciaux de concepts qui pourraient être décrits avec DSL.Your business and your project also deal with special sets of concepts that could be described with a DSL. Par exemple, vous pouvez définir une DSL pour l’une de ces applications :For example, you could define a DSL for one of these applications:

  • Plan des chemins d’accès de navigation d’un site Web.Plan of navigation paths in a Web site.

  • Schémas de câblage pour des composants électroniques.Wiring diagrams for electronic components.

  • Réseaux des tapis roulants et matériel pour un aéroport de manutention de bagages.Networks of conveyor belts and baggage handling equipment for an airport.

Lorsque vous concevez une DSL, vous définissez un classe de domaine pour chacun des concepts importants dans le domaine, par exemple une page Web, feu ou aéroport archivage du support.When you design a DSL, you define a domain class for each of the important concepts in the domain, such as a Web page, lamp, or airport check-in desk. Vous définissez relations de domaine comme lien hypertexte, câble ou un tapis roulant pour relier les concepts.You define domain relationships such as hyperlink, wire, or a conveyor belt to link the concepts together.

Créent des utilisateurs de votre DSL modèles.Users of your DSL create models. Les modèles sont instances la DSL.Models are instances of the DSL. Par exemple, elles décrivent un site Web particulier, ou le câblage d’un périphérique particulier, ou le système dans un aéroport déterminé de manutention de bagages.For example, they describe a particular Web site, or the wiring of a particular device, or the baggage handling system in a particular airport.

Vos utilisateurs peuvent afficher un modèle sous la forme d’un diagramme ou un Windows form.Your users can view a model as a diagram or as a Windows form. Les modèles peuvent également être affichés en tant que XML, qui est la façon dont elles sont stockées.Models can also be viewed as XML, which is how they are stored. Lorsque vous définissez une DSL, vous définir comment les instances de chaque classe de domaine et chaque relation apparaissent sur l’écran de l’utilisateur.When you define a DSL, you define how the instances of each domain class and relationship appear on the user's screen. DSL par défaut s’affiche comme une collection d’icônes ou de rectangles reliées par des flèches.A typical DSL is displayed as a collection of icons or rectangles connected by arrows.

L’illustration suivante montre un modèle petit dans DSL schématique :The following figure shows a small model in a diagrammatic DSL:

Modèle d’arbre généalogique TudorTudor Family Tree Model

Ce que vous pouvez faire avec DSLWhat you can do with DSLs

Une application classique d’une DSL est pour générer du code de programme ou d’autres artefacts.A typical application of a DSL is to generate program code or other artifacts. Lorsque vous définissez votre DSL, vous pouvez définir modèles de texte qui lire un modèle de la DSL et générer des fichiers texte.When you define your DSL, you can define text templates that read a model of the DSL and generate text files.

Par exemple, vous pouvez écrire des modèles qui prennent un plan d’aéroport et génèrent une partie du logiciel pour les bagages de gestion, ainsi que certains documents utilisateur qui décrivent le plan.For example, you could write templates that take an airport plan and generate part of the software for baggage handling, as well as some of the user documents that describe the plan.

Lorsque vous avez défini une DSL, vous pouvez le distribuer à d’autres utilisateurs qui peuvent l’installer sur leurs propres ordinateurs.When you have defined a DSL, you can distribute it to other users who can install it on their own computers. Les utilisateurs de votre DSL peuvent créer et modifier des modèles dans Visual Studio.Users of your DSL can create and edit models in Visual Studio.

Vous pouvez également définir des commandes de menu et autres outils permettant aux utilisateurs de modifier la DSL, contraintes de validation pour garantir la DSL est utilisée correctement, et les modèles d’élément permettant aux utilisateurs de créent de nouvelles instances.You can also define menu commands and other tools that help users edit the DSL, validation constraints to help ensure that the DSL is used correctly, and item templates that help users create new instances. Vous pouvez encapsuler un ou plusieurs DSL avec leurs outils et d’autres extensions de Visual Studio comme un ensemble intégré.You can wrap one or more DSLs with their tools and other Visual Studio extensions as an integrated package.

En règle générale, un langage spécifique à un domaine est créé quand une équipe de développement doit écrire un code similaire à plusieurs produits.Typically, a domain-specific language is created when a development team has to write similar code for several products. Par exemple, une entreprise spécialisée dans les systèmes de manutention de bagages peut définir une DSL de suivi de bagages à partir duquel ils peuvent générer le code pour chaque installation.For example, a company that specializes in baggage handling systems might define a baggage track DSL from which they can generate some of the code for each installation. Les avantages de la DSL sont qu’il puissent être reconnus par leurs clients, que le code généré à partir de celui-ci est fiable, et que le système peut être rapidement mis à jour si l’évolution des besoins des clients.The benefits of the DSL are that it can be understood by their customers, that the code generated from it is reliable, and that the system can be rapidly updated if the customers' requirements change.

--- --- Outils DSL (langage spécifique à un domaine)Domain-Specific Language Tools vous permet de créer un langage spécifique à un domaine qui contient votre propre concepteur graphique et la notation de votre propre schéma et ensuite utiliser le langage pour générer le code source approprié pour chaque projet. lets you create a domain-specific language that has your own graphical designer and your own diagram notation, and then use the language to generate appropriate source code for each project.

Développement de spécifique à un domaineDomain-Specific Development

Développement de spécifique à un domaine consiste à identifier les parties de vos applications qui peuvent être modélisées en utilisant un langage spécifique à un domaine, puis construction de la langue et à son déploiement sur les développeurs d’applications.Domain-specific development is the process of identifying the parts of your applications that can be modeled by using a domain-specific language, and then constructing the language and deploying it to the application developers. Les développeurs d’utilisent le langage spécifique à un domaine pour construire des modèles qui sont spécifiques à leurs applications, utiliser les modèles pour générer le code source, puis utiliser le code source pour développer des applications.The developers use the domain-specific language to construct models that are specific to their applications, use the models to generate source code, and then use the source code to develop the applications.

Aspects du développement de graphique spécifique à un domaineAspects of Graphical Domain-Specific Development

Un langage spécifique à un domaine graphique doit inclure les fonctionnalités suivantes :A graphical domain-specific language must include the following features:

  • NotationNotation

  • Modèle de domaineDomain model

  • Génération de l’artefactArtifact generation

  • SérialisationSerialization

  • Intégration à Visual StudioIntegration with Visual Studio

NotationNotation

Un langage spécifique à un domaine doit avoir un ensemble relativement peu volumineux d’éléments qui peuvent être définis et étendus pour représenter des constructions spécifiques à un domaine.A domain-specific language must have a reasonably small set of elements that can be easily defined and extended to represent domain-specific constructs. Une notation se compose de formes, qui représentent les éléments, et de connecteurs, qui représentent les relations entre les éléments, sur une surface du diagramme.A notation consists of shapes, which represent the elements, and connectors, which represent the relationships between elements, on a graphical diagram surface. Dans --- --- Outils DSL (langage spécifique à un domaine)Domain-Specific Language Tools, les formes peuvent être étendus et optimisés pour représenter les éléments de votre langage spécifique à un domaine.In --- --- Outils DSL (langage spécifique à un domaine)Domain-Specific Language Tools, the shapes can be extended and refined to represent the elements of your domain-specific language.

Modèle de domaineDomain Model

Un langage spécifique à un domaine doit combiner l’ensemble des éléments et les relations entre eux dans une grammaire cohérente.A domain-specific language must combine the set of elements and the relationships between them into a coherent grammar. Il doit également définir si les combinaisons d’éléments et les relations sont valides.It must also define whether combinations of elements and relationships are valid. Par exemple, les langages de programmation empêchent généralement l’héritage circulaire, dans laquelle une classe est dérivée d’une classe de seconde et la deuxième classe est dérivée de la première classe.For example, programming languages typically prevent circular inheritance, in which one class is derived from a second class and the second class is derived from the first class. Contraintes peuvent également être utilisées pour exprimer la logique métier, par exemple, une personne ne peut pas être un dépendant de lui-même.Constraints can also be used to express business logic, for example, one person cannot be a dependent of himself. --- --- Outils DSL (langage spécifique à un domaine)Domain-Specific Language Tools utilise les contraintes pour exprimer les types de restrictions nécessitant plus des langages spécifiques à un domaine. uses constraints to express the kinds of restrictions that most domain-specific languages require.

Génération de l’artefactArtifact Generation

Un des principaux objectifs d’un langage spécifique à un domaine consiste à générer un artefact, par exemple, code source, un fichier XML ou autres données utilisables.One of the main purposes of a domain-specific language is to generate an artifact, for example, source code, an XML file, or some other usable data. En règle générale, une modification dans le modèle signifie une modification de l’artefact.Typically, a change in the model means a change in the artifact. Vous pouvez utiliser --- --- Outils DSL (langage spécifique à un domaine)Domain-Specific Language Tools pour générer des artefacts et régénérer les lorsque vous modifiez le modèle.You can use --- --- Outils DSL (langage spécifique à un domaine)Domain-Specific Language Tools to generate artifacts and to regenerate them when you change the model.

SérialisationSerialization

Un langage spécifique à un domaine doit être conservé dans une forme qui peut être modifiée, enregistrée, fermée et rechargée.A domain-specific language must be persisted in some form that can be edited, saved, closed, and reloaded. --- --- Outils DSL (langage spécifique à un domaine)Domain-Specific Language Tools utilise un format XML qui vous permet de définir et personnaliser la façon dont votre langage spécifique à un domaine est sérialisé ou rendues persistantes. uses an XML format that lets you define and customize how your domain-specific language is serialized or persisted.

Intégration à Visual StudioIntegration with Visual Studio

Étant donné que --- --- Outils DSL (langage spécifique à un domaine)Domain-Specific Language Tools est hébergé dans Visual Studio, elle s’étend plusieurs fenêtres de Visual Studio et des contrôles.Because --- --- Outils DSL (langage spécifique à un domaine)Domain-Specific Language Tools is hosted in Visual Studio, it extends many Visual Studio windows and controls. Il vous permet également de personnaliser le comportement des commandes de menu, des éléments de boîte à outils et autres éléments de l’interface utilisateur.It also lets you customize the behavior of menu commands, toolbox items, and other elements of the user interface.

Vous pouvez également créer un adaptateur de Bus pour votre langage spécifique à un domaine.You can also create a Model Bus Adapter for your domain-specific language. Cet adaptateur vous permet d’un modèle de référence et des éléments au sein d’un modèle et vous permet de que écrire du code qui peut accéder et mettre à jour une instance de la DSL.This adapter lets you reference a model and elements within a model, and lets you write code that can access and update an instance of the DSL. À l’aide d’un mécanisme puissant Bus de modèles, vous pouvez écrire des extensions Visual Studio qui fonctionnent avec plusieurs modèles.By using the powerful Model Bus mechanism, you can write Visual Studio extensions that work with multiple models. Vous pouvez également écrire des applications autonomes qui fonctionnent avec les modèles.You can also write stand-alone applications that work with models. Pour plus d’informations, consultez intégration de modèles à l’aide de Visual Studio Modelbus.For more information, see Integrating Models by using Visual Studio Modelbus.

Avantages du développement de spécifique à un domaineBenefits of Domain-Specific Development

Un langage spécifique à un domaine peut fournir les avantages suivants :A domain-specific language can provide the following benefits:

  • Contient des constructions qui correspondent exactement à l’espace du problème.Contains constructs that exactly fit the problem space.

    Contrairement aux langages à usage général, un langage spécifique à un domaine se compose des éléments et des relations qui représentent directement la logique de l’espace du problème.Unlike general-purpose languages, a domain-specific language consists of elements and relationships that directly represent the logic of the problem space. Par exemple, une application d’assurance doit inclure les éléments des stratégies et les revendications.For example, an insurance policy application must include elements for policies and claims. Un langage spécifique à un domaine facilite la conception de l’application et de rechercher et de corriger les erreurs de logique.A domain-specific language makes it easier to design the application, and find and correct errors of logic.

  • Permet de non-développeurs et les personnes qui ne connaissent pas le domaine comprendre la conception générale.Lets non-developers and people who do not know the domain understand the overall design.

    En utilisant un langage spécifique à un domaine graphique, vous pouvez créer une représentation visuelle du domaine afin que non-les développeurs peuvent facilement comprendre la conception de l’application.By using a graphical domain-specific language, you can create a visual representation of the domain so that non-developers can easily understand the design of the application.

  • Facilite la création d’un prototype de l’application finale.Makes it easier to create a prototype of the final application.

    Les développeurs peuvent utiliser le code qui génère de leur modèle pour créer une application de prototype qu’ils peuvent fournir aux clients.Developers can use the code that their model generates to create a prototype application that they can show to clients.

Le processus de développement de spécifique à un domaineThe Process of Domain-Specific Development

La plupart des équipes de développement logiciel qui utilisent des langages spécifiques à un domaine suivent ces étapes pour créer et utiliser leurs modèles :Most software development teams that use domain-specific languages follow these steps to create and use their models:

  • L’équipe permet de différencier les parties variables du domaine à partir des éléments qui ne changent jamais.The team distinguishes the variable parts of the domain from the parts that never change.

  • Les développeurs d’écrire du code pour les parties fixes et conserver les points d’extension pour les parties variables.The developers write code for the fixed parts and leave extension points for the variable parts.

  • Le responsable du développement logiciel ou l’architecte crée un langage spécifique à un domaine qui incorpore les modèles de conception des parties du domaine et les points d’extension pour les parties variables fixes.The lead software developer or the architect creates a domain-specific language that incorporates the design patterns of the fixed parts of the domain and the extension points for the variable parts.

  • Le responsable du développement logiciel ou l’architecte déploie le langage spécifique à un domaine pour les développeurs de diverses applications qui l’équipe de produit.The lead software developer or the architect deploys the domain-specific language to the developers of the various applications that the team produces.

  • Chaque développeur crée un modèle qui s’applique à l’application spécifique.Every developer creates a model that applies to the specific application.