Question

J'entends de plus en plus parler de langages spécifiques à un domaine et de la façon dont ils changent la façon dont vous traitez la logique métier, et j'ai vu Articles du blog d'Ayende et tout, mais je n'ai jamais vraiment compris pourquoi je retirerais ma logique métier des méthodes et des situations que j'utilise chez mon fournisseur.

Si vous avez des connaissances en matière d'utilisation de ces éléments, vous pourriez peut-être le formuler en termes simples :

  • Que signifie exactement la création de DSL ?
  • Quelles langues utilisez-vous ?
  • Où utiliser un DSL est-il judicieux ?
  • Quel est l’avantage d’utiliser les DSL ?
Était-ce utile?

La solution

Les DSL sont utiles dans les situations où vous devez confier certains aspects du contrôle du système à quelqu'un d'autre.Je les ai utilisés dans les moteurs de règles, où vous créez un langage simple qui est plus facile à utiliser pour les personnes moins techniques pour s'exprimer, en particulier dans les flux de travail.

Autrement dit, au lieu de leur faire apprendre Java :

DocumentDAO myDocumentDAO = ServiceLocator.getDocumentDAO();
for (int id : documentIDS) {
Document myDoc = MyDocumentDAO.loadDoc(id);
if (myDoc.getDocumentStatus().equals(DocumentStatus.UNREAD)) {
    ReminderService.sendUnreadReminder(myDoc)
}

Je peux écrire un DSL qui me permet de dire :

for (document : documents) {
if (document is unread) {
 document.sendReminder
}

Il existe d'autres situations, mais fondamentalement, partout où vous souhaitez utiliser un langage macro, créer un script de flux de travail ou autoriser une personnalisation après-vente, ce sont tous des candidats pour les DSL.

Autres conseils

DSL représente Langage spécifique au domaine c'est à dire.langage conçu spécifiquement pour résoudre des problèmes dans un domaine donné.
Par exemple, Markdown (langage de balisage utilisé pour éditer des publications sur SO) peut être considéré comme un DSL.

Personnellement, je trouve une place pour le DSL dans presque tous les grands projets sur lesquels je travaille.Le plus souvent, j'ai besoin d'une sorte de langage de requête de type SQL.Une autre utilisation courante concerne les systèmes basés sur des règles, vous avez besoin d'une sorte de langage pour spécifier les règles/conditions.

Le DSL a du sens dans un contexte où il est difficile de décrire/résoudre un problème par des moyens traditionnels.

Si vous utilisez Microsoft Visual Studio, vous utilisez déjà plusieurs DSL – la surface de conception pour les formulaires Web, Winforms, etc.est un DSL.Le Concepteur de classes est un autre exemple.

Un DSL n'est qu'un ensemble d'outils qui (au moins en théorie) permettent le développement dans un "domaine" spécifique (c'est-à-diremise en page visuelle) plus facile, plus intuitive et plus productive.

En ce qui concerne la création d'un DSL, certaines des choses sur lesquelles des gens comme Ayende ont écrit sont liées aux DSL « d'analyse de texte », permettant aux développeurs (ou aux utilisateurs finaux) de saisir du « texte naturel » dans une application, qui analyse le texte et génère une sorte de texte. de code ou de sortie basée sur celui-ci.

Vous pouvez utiliser n'importe quel langage pour créer votre propre DSL.Microsoft Visual Studio possède de nombreux points d'extensibilité, ainsi que des modèles et des pratiques "Boîte à outils d'automatisation du guidage" et Kit de développement logiciel Visual Studio peut vous aider à ajouter la fonctionnalité DSL à Visual Studio.

DSL sont des compilateurs de base pour les langages personnalisés.Un bon outil « gratuit et ouvert » pour les développer est disponible sur ANTLR.Récemment, j'ai regardé ce DSL pendant un langage machine à états utiliser sur un nouveau projet.Je suis d'accord avec Tim Howland ci-dessus, à savoir qu'ils peuvent être un bon moyen de laisser quelqu'un d'autre personnaliser votre application.

Pour information, un livre sur les DSL est en préparation dans le cadre de la série signature de Martin Fowler.

S'il est du même niveau que les autres livres de la série, cela devrait être une bonne lecture.

Plus d'information ici

DSL n'est qu'un nom fantaisiste et peut signifier différentes choses :

  • Rails (le truc Ruby) est parfois appelé DSL car il ajoute des méthodes spéciales (et écrase également certaines méthodes intégrées) pour parler des applications Web.

  • ANT, syntaxe Makefile, etc.sont également des DSL, mais ont leur propre syntaxe.C'est ce que j'appellerais un DSL.

Un aspect important de ce battage médiatique :Il est logique de penser votre application en termes de langage.De quoi voulez-vous parler dans votre application ?Ce devraient alors être vos classes et méthodes :

  1. Définissez un "langage" (soit une syntaxe réelle comme proposée par d'autres sur cette page, soit une hiérarchie de classes pour votre langage préféré) capable d'exprimer votre problème.
  2. Résolvez votre problème en termes de cette langue.

DSL crée essentiellement votre propre petit sous-langage pour résoudre un problème de domaine spécifique.Ceci est résolu en utilisant le chaînage de méthodes.Les langues dans lesquelles les points et les parenthèses sont facultatifs contribuent à rendre ces expressions plus naturelles.Cela peut également être similaire à un modèle de constructeur.Les DSL ne sont pas des langages en eux-mêmes, mais plutôt un modèle que vous appliquez à votre API pour rendre les appels plus explicites.

Un exemple est Guice, Guide de l'utilisateur Guice http://docs.google.com/View?docid=dd2fhx4z_5df5hw8 contient une description plus bas de la manière dont les interfaces sont liées aux implémentations et dans quels contextes.

Un autre exemple courant concerne les langages de requête.Par exemple:

NewsDAO.writtenBy("someUser").before("someDate").updateStatus("Deleted")

Dans l'implémentation, imaginez que chaque méthode renvoie soit un nouvel objet Query, soit simplement cette mise à jour en interne.À tout moment, vous pouvez terminer la chaîne en utilisant par exemple rows() pour obtenir toutes les lignes, ou updateSomeField comme je l'ai fait ci-dessus ici.Les deux renverront un objet résultat.

Je recommanderais également de jeter un œil à l'exemple Guice ci-dessus, car chaque appel renvoie un nouveau type avec de nouvelles options.Un bon IDE vous permettra de compléter, en indiquant clairement les options dont vous disposez à chaque point.

Modifier:Il semble que beaucoup considèrent les DSL comme de nouveaux langages simples et à usage unique dotés de leurs propres analyseurs.J'associe toujours le DSL à l'utilisation du chaînage de méthodes comme convention pour exprimer des opérations.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top