После тщательного изучения DSL на некоторое время я нашел несколько интересных вещей. То, что JavaScript использует большинство, это, вероятно, цепные вызовы (методы цепочки, а именно цепочка методов). Интересно, что Мартин Флауэр указал:
Кода -копия выглядит следующим образом:
Я также заметил общее заблуждение - многие люди, кажется, равны беглым интерфейсам с цепочкой методов. Конечно, цепочка является общей техникой для использования со свободными интерфейсами, но истинная беглость - это гораздо больше, чем это.
Многие люди приравнивают цепные звонки с плавными интерфейсами. Тем не менее, цепные вызовы являются распространенным методом для гладких интерфейсов, и есть больше, чем немного реальных гладких интерфейсов.
DSL Smooth Interface
Первоначальное намерение плавного интерфейса состоит в том, чтобы создать читаемый API, в конце концов, код написан для людей.
Точно так же давайте посмотрим на DOM ранее, мы использовали каскад метода для работы
Кода -копия выглядит следующим образом:
var btn = document.createElement ("кнопка"); // Создать элемент <Tood>
var t = document.createTextNode («Нажмите меня»); // Создать текстовый узел
btn.appendchild (t); // Добавление текста в <Кнопку>
document.body.appendchild (btn); // Приложение <Tood> к <Body>
И если вы пишете в jQuery, это все
Кода -копия выглядит следующим образом:
$ ('<pan>'). Append («Нажмите меня»);
и т. д.
Таким образом, мы можем создать простой пример, чтобы показать самый простой DSL
Кода -копия выглядит следующим образом:
Func = (function () {
this.add = function () {
console.log ('1');
вернуть это;
};
this.result = function () {
console.log ('2');
вернуть это;
};
вернуть это;
});
var func = new func ();
func.add (). result ();
Тем не менее, это выглядит как генератор выражения.
Генератор выражения DSL
Объект генератора экспрессии предоставляет набор когерентных интерфейсов, которые затем преобразуются в вызовы в базовый API команд.
Такой API, мы можем увидеть в некоторых API о базах данных:
Кода -копия выглядит следующим образом:
var Query =
SQL ('SELECT NAME, DESC FROM Widgets')
. Где ('цена <', $ (params.max_price) и,
'clearance =', $ (params.clearance))
.Orderby ('name asc');
Есть проблема с цепными вызовами, которые заканчиваются. Мы не закончились в том же коде, что и выше, что очень запутанно. Полем Добавление запроса и конца кажется хорошим результатом.
другой
Метод каскад
Это выражено следующим образом:
Кода -копия выглядит следующим образом:
ab ();
ac ();