À propos des langages spécifiques à un domaine

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.

Les DSL connus incluent des expressions régulières et SQL. Chaque DSL est beaucoup mieux qu’un langage à usage général pour décrire des opérations sur des chaînes de texte ou une base de données, mais bien pire pour décrire des idées qui ne sont pas dans sa propre portée. Les industries individuelles ont également leurs propres DSL. Par exemple, dans l’industrie des télécommunications, les langages de description des appels sont largement utilisés pour spécifier la séquence d’états dans un appel téléphonique, et dans le secteur des voyages aériens, un DSL standard est utilisé pour décrire les réservations de vols.

Votre entreprise et votre projet traitent également d’ensembles spéciaux de concepts qui peuvent être décrits avec un DSL. Par exemple, vous pouvez définir un DSL pour l’une de ces applications :

  • Plan des chemins de navigation dans un site web.

  • Diagrammes de câblage pour les composants électroniques.

  • Réseaux de tapis roulants et d’équipement de gestion des bagages pour un aéroport.

Lorsque vous concevez un DSL, vous définissez une classe de domaine pour chacun des concepts importants du domaine, tels qu’une page web, une lampe ou un bureau d’enregistrement à l’aéroport. Vous définissez des relations de domaine telles que le lien hypertexte, le câble ou un tapis roulant pour lier les concepts ensemble.

Les utilisateurs de votre DSL créent des modèles. Les modèles sont des instances du DSL. Par exemple, ils décrivent un site web particulier, ou le câblage d’un appareil particulier, ou le système de gestion des bagages dans un aéroport particulier.

Vos utilisateurs peuvent afficher un modèle sous forme de diagramme ou sous la forme d’un formulaire Windows. Les modèles peuvent également être consultés en tant que XML, c’est-à-dire la façon dont ils sont stockés. Lorsque vous définissez un DSL, vous définissez la façon dont les instances de chaque classe de domaine et relation apparaissent à l’écran de l’utilisateur. Un DSL classique s’affiche sous la forme d’une collection d’icônes ou de rectangles connectés par des flèches.

La figure suivante montre un petit modèle dans un DSL sous forme de diagramme :

Tudor Family Tree Model

Ce que vous pouvez faire avec les DSL

Une application classique d’un DSL consiste à générer du code de programme ou d’autres artefacts. Lorsque vous définissez votre DSL, vous pouvez définir des modèles de texte qui lisent un modèle du DSL et génèrent des fichiers texte.

Par exemple, vous pouvez écrire des modèles qui prennent un plan d’aéroport et générer une partie du logiciel pour la gestion des bagages, ainsi que certains documents utilisateur qui décrivent le plan.

Lorsque vous avez défini un DSL, vous pouvez le distribuer à d’autres utilisateurs qui peuvent l’installer sur leurs propres ordinateurs. Les utilisateurs de votre DSL peuvent créer et modifier des modèles dans Visual Studio.

Vous pouvez également définir des commandes de menu et d’autres outils qui aident les utilisateurs à modifier le DSL, des contraintes de validation pour vous assurer que le DSL est utilisé correctement, et des modèles d’élément qui aident les utilisateurs à créer de nouvelles instances. Vous pouvez encapsuler un ou plusieurs DSL avec leurs outils et d’autres extensions Visual Studio en tant que package intégré.

En règle générale, un langage spécifique à un domaine est créé lorsqu’une équipe de développement doit écrire du code similaire pour plusieurs produits. 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 un certain code pour chaque installation. Les avantages du DSL sont qu’il peut être compris 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 les exigences des clients changent.

Les outils de langage spécifiques à un domaine vous permettent de créer un langage spécifique à un domaine qui possède votre propre concepteur graphique et votre propre notation de diagramme, puis d’utiliser le langage pour générer le code source approprié pour chaque projet.

Développement spécifique à un domaine

Le développement spécifique à un domaine est le processus d’identification des parties de vos applications qui peuvent être modélisées à l’aide d’un langage spécifique à un domaine, puis la construction du langage et son déploiement sur les développeurs d’applications. Les développeurs utilisent le langage spécifique à un domaine pour construire des modèles spécifiques à leurs applications, utiliser les modèles pour générer du code source, puis utiliser le code source pour développer les applications.

Aspects du développement spécifique à un domaine graphique

Un langage graphique spécifique à un domaine doit inclure les fonctionnalités suivantes :

  • Notation

  • Modèle de domaine

  • Génération d’artefacts

  • Sérialisation

  • Intégration à Visual Studio

Notation

Un langage spécifique à un domaine doit avoir un ensemble raisonnablement réduit d’éléments qui peuvent être facilement définis et étendus pour représenter des constructions spécifiques au domaine. Une notation se compose de formes, qui représentent les éléments et les connecteurs, qui représentent les relations entre les éléments, sur une surface de diagramme graphique. Dans les outils de langage spécifiques à un domaine, les formes peuvent être étendues et affinées pour représenter les éléments de votre langage spécifique à un domaine.

Modèle de domaine

Un langage spécifique à un domaine doit combiner l’ensemble d’éléments et les relations entre eux dans une grammaire cohérente. Il doit également définir si les combinaisons d’éléments et de relations sont valides. Par exemple, les langages de programmation empêchent généralement l’héritage circulaire, dans lequel une classe est dérivée d’une deuxième classe et la deuxième classe est dérivée de la première classe. Les contraintes peuvent également être utilisées pour exprimer la logique métier, par exemple, une personne ne peut pas être dépendante d’elle-même. Les outils de langage spécifiques à un domaine utilisent des contraintes pour exprimer les types de restrictions dont la plupart des langages spécifiques à un domaine nécessitent.

Génération d’artefacts

L’un des principaux objectifs d’un langage spécifique à un domaine consiste à générer un artefact, par exemple, du code source, un fichier XML ou d’autres données utilisables. En règle générale, une modification du modèle signifie une modification de l’artefact. Vous pouvez utiliser les outils de langage spécifiques à un domaine pour générer des artefacts et les régénérer lorsque vous modifiez le modèle.

Sérialisation

Un langage spécifique à un domaine doit être conservé dans un formulaire qui peut être modifié, enregistré, fermé et rechargé. Les outils de langage spécifiques à un domaine utilisent 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é ou conservé.

Intégration à Visual Studio

Étant donné que les outils de langage spécifiques à un domaine sont hébergés dans Visual Studio, il étend de nombreuses fenêtres et contrôles Visual Studio. Il vous permet également de personnaliser le comportement des commandes de menu, des éléments de boîte à outils et d’autres éléments de l’interface utilisateur.

Vous pouvez également créer un adaptateur Model Bus pour votre langage spécifique à un domaine. Cet adaptateur vous permet de référencer un modèle et des éléments au sein d’un modèle, et vous permet d’écrire du code qui peut accéder à une instance du DSL et la mettre à jour. En utilisant le puissant mécanisme Model Bus, vous pouvez écrire des extensions Visual Studio qui fonctionnent avec plusieurs modèles. Vous pouvez également écrire des applications autonomes qui fonctionnent avec des modèles. Pour plus d’informations, consultez Intégration de modèles à l’aide de Visual Studio Modelbus.

Avantages du développement spécifique à un domaine

Un langage spécifique à un domaine peut offrir les avantages suivants :

  • Contient des constructions qui correspondent exactement à l’espace de problème.

    Contrairement aux langages à usage général, un langage spécifique à un domaine se compose d’éléments et de relations qui représentent directement la logique de l’espace de problème. Par exemple, une demande de police d’assurance doit inclure des éléments pour les polices et les réclamations. Un langage spécifique à un domaine facilite la conception de l’application, et recherche et corrige les erreurs de logique.

  • Permet aux non-développeurs et aux personnes qui ne connaissent pas le domaine de comprendre la conception globale.

    En utilisant un langage graphique spécifique à un domaine, vous pouvez créer une représentation visuelle du domaine afin que les non-développeurs puissent facilement comprendre la conception de l’application.

  • Facilite la création d’un prototype de l’application finale.

    Les développeurs peuvent utiliser le code généré par leur modèle pour créer une application prototype qu’ils peuvent montrer aux clients.

Processus de développement spécifique au domaine

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 :

  • L’équipe distingue les parties variables du domaine des parties qui ne changent jamais.

  • Les développeurs écrivent du code pour les parties fixes et conservent des points d’extension pour les parties variables.

  • Le développeur de logiciels principal 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.

  • Le développeur de logiciels principal ou l’architecte déploie le langage spécifique au domaine aux développeurs des différentes applications produites par l’équipe.

  • Chaque développeur crée un modèle qui s’applique à l’application spécifique.