Después de estudiar cuidadosamente DSL por un tiempo, encontré varias cosas interesantes. Lo que más usa JavaScript es probablemente llamadas de cadena (cadenas de métodos, a saber, encadenamiento del método). Curiosamente, Martin Flower señaló:
La copia del código es la siguiente:
También he notado una idea errónea común: muchas personas parecen igualar las interfaces fluidas con el encadenamiento del método. Ciertamente, el encadenamiento es una técnica común para usar con interfaces fluidas, pero la verdadera fluidez es mucho más que eso.
Muchas personas equiparan las llamadas de cadena con interfaces suaves. Sin embargo, las llamadas de la cadena son un método común para interfaces suaves, y hay más que un poco de interfaces suaves reales.
Interfaz suave de DSL
La intención original de una interfaz suave es construir una API legible, después de todo, el código está escrito para que las personas lo vean.
Del mismo modo, echemos un vistazo al DOM antes, utilizamos Method Cascade para operar
La copia del código es la siguiente:
var btn = document.createElement ("botón"); // Crear un elemento <botón>
var t = document.createTextNode ("Haga clic en mí"); // crear un nodo de texto
btn.appendChild (t); // Agregar el texto a <botón>
document.body.appendChild (BTN); // agregar <botón> a <body>
Y si escribes en jQuery, eso es todo
La copia del código es la siguiente:
$ ('<span>'). Append ("Haga clic en mí");
etc.
Para que podamos crear un ejemplo simple para mostrar el DSL más simple
La copia del código es la siguiente:
Func = (function () {
this.add = function () {
console.log ('1');
devolver esto;
};
this.result = function () {
console.log ('2');
devolver esto;
};
devolver esto;
});
var func = new Func ();
func.add (). result ();
Sin embargo, esto parece un generador de expresión.
Generador de expresión DSL
El objeto Generador de expresión proporciona un conjunto de interfaces coherentes que luego se convierten en llamadas a la API de cuidante de comandos subyacente.
Tal API, podemos ver en algunas API sobre bases de datos:
La copia del código es la siguiente:
consulta var =
SQL ('Seleccionar nombre, Desc de widgets')
.Where ('Price <', $ (params.max_price) y,
'despeje =', $ (params.clearance))
.Orderby ('nombre asc');
Hay un problema con las llamadas de la cadena ese final. No terminamos en el mismo código que el anterior, lo cual es muy confuso. . Agregar una consulta y fin parece ser un buen resultado.
otro
Cascada de método
Se expresa de la siguiente manera:
La copia del código es la siguiente:
ab ();
C.A();