Après avoir soigneusement étudié DSL pendant un certain temps, j'ai trouvé plusieurs choses intéressantes. La chose que JavaScript utilise le plus est probablement les appels de chaîne (chaînes de méthode, à savoir le chaînage de méthode). Fait intéressant, Martin Flower a souligné:
La copie de code est la suivante:
J'ai également remarqué une idée fausse commune - beaucoup de gens semblent égaler les interfaces courantes avec le chaînage de méthode. Certes, le chaînage est une technique courante à utiliser avec des interfaces courantes, mais la vraie maîtrise est bien plus que cela.
Beaucoup de gens assimilent les appels de chaîne à des interfaces lisses. Cependant, les appels de chaîne sont une méthode courante pour les interfaces lisses, et il y a plus qu'un peu d'interfaces lisses réelles.
Interface lisse DSL
L'intention originale d'une interface en douceur est de construire une API lisible, après tout, le code est écrit pour que les gens puissent les voir.
De même, jetons un coup d'œil au Dom plus tôt, nous avons utilisé la méthode Cascade pour fonctionner
La copie de code est la suivante:
var btn = document.createElement ("bouton"); // Créer un élément <fouflé
var t = document.CreateTextNode ("Cliquez sur moi"); // Créer un nœud de texte
btn.appendChild (t); // Ajouter le texte à <Fut-bouton>
Document.Body.ApendChild (BTN); // Ajouter <fée <Nutton> à <body>
Et si vous écrivez en jQuery, c'est tout
La copie de code est la suivante:
$ ('<span>'). Ajouter ("Cliquez sur moi");
etc.
Nous pouvons donc créer un exemple simple pour montrer le DSL le plus simple
La copie de code est la suivante:
Func = (function () {
this.add = function () {
console.log ('1');
retourner ceci;
};
this.result = function () {
console.log ('2');
retourner ceci;
};
retourner ceci;
});
var func = new func ();
func.Add (). result ();
Cependant, cela ressemble à un générateur d'expression.
Générateur d'expression DSL
L'objet du générateur d'expression fournit un ensemble d'interfaces cohérentes qui sont ensuite converties en appels en API de commande de commande sous-jacente.
Une telle API, nous pouvons voir dans certaines API sur les bases de données:
La copie de code est la suivante:
var requête =
SQL ('Sélectionner Nom, Desc From Widgets')
.Where ('Price <', $ (params.max_price), et,
'Clearance =', $ (params.clearance))
.Orderby ('name asc');
Il y a un problème avec les appels de chaîne qui se terminent. Nous ne nous sommes pas terminés par le même code que ci-dessus, ce qui est très déroutant. . L'ajout d'une requête et d'une fin semble être un bon résultat.
autre
Méthode Cascade
Il est exprimé comme suit:
La copie de code est la suivante:
ab ();
ac ();