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

Contrairement à un langage à 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 Well-Known inclure des expressions régulières et SQL.Well-known DSLs include regular expressions and SQL. Chaque DSL est largement préférable à un langage à usage général pour décrire les opérations de chaînes de texte ou une base de données, mais bien pire pour décrire les 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. Secteurs d’activité individuels 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 des États dans un appel téléphonique et en l’air 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 également y spécial des concepts qui peuvent être décrite avec une solution 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 un 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 dans un site Web.Plan of navigation paths in a website.

  • Schémas de câblage de 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 solution DSL, vous définissez un de classe de domaine pour chacun des concepts importants dans le domaine, par exemple une page web, lamp ou aéroport bureau d’enregistrement.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 du DSL.Models are instances of the DSL. Par exemple, ils décrivent un site Web particulier, ou le câblage d’un appareil particulier, ou système dans un aéroport particulier de gestion des bagages.For example, they describe a particular website, 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 formulaire Windows.Your users can view a model as a diagram or as a Windows form. Modèles peuvent également être affichés en tant que XML, qui est la façon dont ils sont stockés.Models can also be viewed as XML, which is how they are stored. Lorsque vous définissez un DSL, vous définir comment les instances de chaque classe de domaine et de la relation s’affichent 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. Une solution DSL standard s’affiche comme une collection d’icônes ou les rectangles reliées par des flèches.A typical DSL is displayed as a collection of icons or rectangles connected by arrows.

La figure suivante illustre un modèle petit dans un DSL schématique :The following figure shows a small model in a diagrammatic DSL:

Modèle d’arbre généalogique de la famille Tudor

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

Une application classique d’une solution DSL consiste à 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 solution 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 de l’aéroport et génèrent une partie du logiciel pour les bagages gérant, 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 un 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 qui permettent aux utilisateurs de modifier la solution DSL, les contraintes de validation pour garantir que la solution DSL est utilisé 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 en tant qu’un package 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éé lorsqu’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 gestion des bagages peut définir un DSL de piste 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 solution DSL sont qu’il peuvent ê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 vous modifiez des exigences 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 a votre propre concepteur graphique et vos propres notation de diagramme, puis 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 et puis construire le langage 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 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 du code source, puis utilisez le code source pour développer les 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 du 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éfinies et étendu pour représentent 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 des éléments, sur une surface de 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 affiné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 syntaxe 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 la 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 une dépendance 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 des contraintes pour exprimer les types de restrictions qui nécessitent 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

Une des principales finalités 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 les artefacts et les régénérer 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 de personnaliser la façon dont votre langage spécifique à un domaine est sérialisée 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, il étend de nombreuses fenêtres Visual Studio et les 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 de modèle 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 du 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. En utilisant le mécanisme de Bus de modèle puissant, 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 des modèles.You can also write stand-alone applications that work with models. Pour plus d’informations, consultez l’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 de 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 d’éléments et les relations qui représentent directement la logique de l’espace de 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 pour les 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 de comprendre la conception globale de domaine.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-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 de logiciels qui utilisent des langages spécifiques à un domaine suivez 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 distingue les parties variables du domaine à partir des parties 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 laissent 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 développeur de logiciels senior ou l’architecte crée un langage spécifique à un domaine qui incorpore les modèles de conception des parties fixes du domaine et les points d’extension pour les parties variables.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 développeur de logiciels senior ou l’architecte déploie le langage spécifique à un domaine pour les développeurs des diverses applications que l’équipe 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.