Nachdem ich DSL für eine Weile sorgfältig studiert hatte, fand ich einige interessante Dinge. Das, was JavaScript am meisten verwendet, sind wahrscheinlich Kettenaufrufe (Methodenketten, nämlich Methodenverkettung). Interessanterweise wies Martin Flower darauf hin:
Die Codekopie lautet wie folgt:
Ich habe auch ein häufiges Missverständnis festgestellt - viele Menschen scheinen mit Methodenketten fließende Schnittstellen zu erreichen. Sicherlich ist das Ketten eine gemeinsame Technik, die mit fließenden Schnittstellen angewendet werden kann, aber die wahre Flüssigkeit ist viel mehr als das.
Viele Menschen setzen Kettenaufrufe mit glatten Schnittstellen gleich. Kettenaufrufe sind jedoch eine übliche Methode für glatte Schnittstellen, und es gibt mehr als nur ein bisschen echte glatte Schnittstellen.
DSL Smooth -Schnittstelle
Die ursprüngliche Absicht einer reibungslosen Schnittstelle besteht darin, eine lesbare API zu erstellen. Schließlich wird der Code für die Menschen geschrieben.
In ähnlicher Weise haben wir uns das DOM früher angesehen, wir haben Methodenkaskade zum Betrieb verwendet
Die Codekopie lautet wie folgt:
var btn = document.createelement ("button"); // Erstellen Sie ein <tasten> Element
var t = document.createTextNode ("Klicken Sie mich"); // Erstellen Sie einen Textknoten
Btn.AppendChild (t); // den Text an <taste> anhängen
document.body.appendchild (btn); // append <taste> an <body>
Und wenn Sie in jQuery schreiben, ist das es
Die Codekopie lautet wie folgt:
$ ('<span>'). append ("klicken Sie mich");
usw.
So können wir ein einfaches Beispiel erstellen, um die einfachste DSL zu zeigen
Die Codekopie lautet wie folgt:
Func = (function () {
this.add = function () {
console.log ('1');
gib dies zurück;
};
this.result = function () {
console.log ('2');
gib dies zurück;
};
gib dies zurück;
});
var func = new func ();
func.add (). result ();
Dies sieht jedoch wie ein Ausdrucksgenerator aus.
DSL -Expressionsgenerator
Das Expressionsgeneratorobjekt liefert eine Reihe kohärenter Schnittstellen, die dann in Aufrufe zur zugrunde liegenden Befehlsquery-API umgewandelt werden.
Eine solche API, die wir in einigen APIs über Datenbanken sehen können:
Die Codekopie lautet wie folgt:
var query =
SQL ('Name auswählen, Desc von Widgets')
.Wo ('Preis <', $ (params.max_price) und,
'Clearance =', $ (params.clearance))
.Ondby ('Name ASC');
Es gibt ein Problem mit Kettenanrufen an diesem Ende. Wir haben nicht im gleichen Code wie oben beendet, was sehr verwirrend ist. . Das Hinzufügen einer Abfrage und eines Endes scheint ein gutes Ergebnis zu sein.
andere
Methode Kaskade
Es wird wie folgt ausgedrückt:
Die Codekopie lautet wie folgt:
AB ();
AC ();