หลังจากศึกษา DSL อย่างระมัดระวังมาระยะหนึ่งแล้วฉันก็พบสิ่งที่น่าสนใจหลายอย่าง สิ่งที่ JavaScript ใช้ส่วนใหญ่อาจเป็นสายโซ่ (โซ่วิธีการคือการผูกมัดวิธีการ) ที่น่าสนใจมาร์ตินฟลาวเวอร์ชี้ให้เห็น:
การคัดลอกรหัสมีดังนี้:
ฉันยังสังเกตเห็นความเข้าใจผิดทั่วไป - หลายคนดูเหมือนจะเท่ากันกับอินเทอร์เฟซที่คล่องแคล่วกับวิธีการผูกมัด การผูกมัดอย่างแน่นอนเป็นเทคนิคทั่วไปในการใช้กับอินเทอร์เฟซที่คล่องแคล่ว แต่ความคล่องแคล่วที่แท้จริงนั้นยิ่งกว่านั้นมาก
หลายคนถือเอาสายโซ่ด้วยอินเทอร์เฟซที่ราบรื่น อย่างไรก็ตามการโทรแบบโซ่เป็นวิธีการทั่วไปสำหรับอินเทอร์เฟซที่ราบรื่นและมีอินเทอร์เฟซที่ราบรื่นจริง ๆ มากกว่าเล็กน้อย
อินเทอร์เฟซ DSL Smooth
ความตั้งใจดั้งเดิมของอินเทอร์เฟซที่ราบรื่นคือการสร้าง API ที่อ่านได้หลังจากทั้งหมดรหัสถูกเขียนขึ้นเพื่อให้ผู้คนเห็น
ในทำนองเดียวกันลองดูที่ DOM ก่อนหน้านี้เราใช้วิธีการเรียงซ้อนกันเพื่อใช้งาน
การคัดลอกรหัสมีดังนี้:
var btn = document.createelement ("ปุ่ม"); // สร้างองค์ประกอบ <button>
var t = document.createTextNode ("คลิกฉัน"); // สร้างโหนดข้อความ
btn.AppendChild (t); // ผนวกข้อความไปที่ <button>
document.body.appendchild (BTN); // ผนวก <button> ถึง <body>
และถ้าคุณเขียนใน jQuery นั่นมัน
การคัดลอกรหัสมีดังนี้:
$ ('<span>'). ผนวก ("คลิกฉัน");
เป็นต้น
ดังนั้นเราสามารถสร้างตัวอย่างง่ายๆเพื่อแสดง DSL ที่ง่ายที่สุด
การคัดลอกรหัสมีดังนี้:
func = (function () {
this.add = function () {
console.log ('1');
คืนสิ่งนี้;
-
this.result = function () {
console.log ('2');
คืนสิ่งนี้;
-
คืนสิ่งนี้;
-
var func = new func ();
func.add (). result ();
อย่างไรก็ตามสิ่งนี้ดูเหมือนตัวสร้างนิพจน์
เครื่องกำเนิดนิพจน์ DSL
วัตถุ Expression Generator จัดเตรียมชุดของอินเทอร์เฟซที่เชื่อมโยงกันซึ่งจะถูกแปลงเป็นการเรียกไปยัง API คำสั่งพื้นฐาน
API ดังกล่าวเราสามารถเห็นได้ใน API บางส่วนเกี่ยวกับฐานข้อมูล:
การคัดลอกรหัสมีดังนี้:
var query =
SQL ('เลือกชื่อ, desc จากวิดเจ็ต')
.where ('ราคา <', $ (params.max_price) และ,
'clearance =', $ (params.clearance)))
. orderby ('ชื่อ asc');
มีปัญหาเกี่ยวกับการโทรแบบโซ่ที่สิ้นสุด เราไม่ได้จบลงในรหัสเดียวกันกับด้านบนซึ่งสับสนมาก - การเพิ่มแบบสอบถามและจุดสิ้นสุดดูเหมือนจะเป็นผลลัพธ์ที่ดี
อื่น
วิธีการน้ำตก
มันแสดงดังนี้:
การคัดลอกรหัสมีดังนี้:
ab ();
ac ();