Depois de estudar cuidadosamente a DSL por um tempo, encontrei várias coisas interessantes. O que o JavaScript mais usa é provavelmente chamadas de cadeia (cadeias de métodos, ou seja, encadeamento de método). Curiosamente, Martin Flower apontou:
A cópia do código é a seguinte:
Também notei um equívoco comum - muitas pessoas parecem igualar interfaces fluentes com o encadeamento de métodos. Certamente o encadeamento é uma técnica comum para usar com interfaces fluentes, mas a verdadeira fluência é muito mais do que isso.
Muitas pessoas equiparam chamadas de cadeia a interfaces suaves. No entanto, as chamadas de cadeia são um método comum para interfaces suaves e há mais do que apenas um pouco de interfaces lisas reais.
Interface suave DSL
A intenção original de uma interface suave é criar uma API legível, afinal, o código é escrito para as pessoas verem.
Da mesma forma, vamos dar uma olhada no DOM anteriormente, usamos o método em cascata para operar
A cópia do código é a seguinte:
var btn = document.createElement ("botão"); // Crie um elemento <butter>
var t = document.createTextNode ("Clique em mim"); // Crie um nó de texto
btn.appendChild (t); // Anexe o texto a <butto>
document.body.appendChild (btn); // Anexar <butter> a <body>
E se você escrever no jQuery, é isso
A cópia do código é a seguinte:
$ ('<span>'). Anexe ("Clique em mim");
etc.
Para que possamos criar um exemplo simples para mostrar o DSL mais simples
A cópia do código é a seguinte:
Func = (function () {
this.add = function () {
console.log ('1');
devolver isso;
};
this.result = function () {
console.log ('2');
devolver isso;
};
devolver isso;
});
var func = new func ();
func.add (). resultado ();
No entanto, isso parece um gerador de expressão.
Gerador de expressão DSL
O objeto Gerador de Expressão fornece um conjunto de interfaces coerentes que são convertidas em chamadas para a API de comando de comando subjacente.
Tal API, podemos ver em algumas APIs sobre bancos de dados:
A cópia do código é a seguinte:
VAR consulta =
SQL ('Selecione Nome, Desc from Widgets')
.Wre ('preço <', $ (params.max_price) e,,, e,,
'folga =', $ (params.clearance)))
.Orderby ('Nome ASC');
Há um problema com chamadas de cadeia que terminam. Não terminamos no mesmo código que acima, o que é muito confuso. . Adicionar uma consulta e final parece ser um bom resultado.
outro
Método Cascade
É expresso o seguinte:
A cópia do código é a seguinte:
ab ();
AC ();