Setelah mempelajari DSL dengan hati -hati untuk sementara waktu, saya menemukan beberapa hal menarik. Hal yang paling banyak digunakan JavaScript mungkin adalah panggilan rantai (rantai metode, yaitu rantai metode). Menariknya, Martin Flower menunjukkan:
Salinan kode adalah sebagai berikut:
Saya juga memperhatikan kesalahpahaman yang umum - banyak orang tampaknya sama -sama fasih antarmuka dengan rantai metode. Tentu saja rantai adalah teknik umum untuk digunakan dengan antarmuka yang lancar, tetapi kelancaran sejati jauh lebih dari itu.
Banyak orang menyamakan panggilan rantai dengan antarmuka yang halus. Namun, panggilan rantai adalah metode umum untuk antarmuka yang halus, dan ada lebih dari sekadar sedikit antarmuka yang benar -benar halus.
Antarmuka DSL Smooth
Niat asli dari antarmuka yang halus adalah untuk membangun API yang dapat dibaca, setelah semua, kode ini ditulis untuk dilihat orang.
Demikian pula, mari kita lihat DOM sebelumnya, kami menggunakan Method Cascade untuk beroperasi
Salinan kode adalah sebagai berikut:
var btn = document.createElement ("tombol"); // Buat elemen <button>
var t = document.createTextNode ("klik saya"); // Buat node teks
btn.AppendChild (T); // Tambahkan teks ke <button>
Document.Body.AppendChild (BTN); // Tambahkan <nutton> ke <dod>
Dan jika Anda menulis di jQuery, itu saja
Salinan kode adalah sebagai berikut:
$ ('<span>'). append ("klik saya");
dll.
Jadi kita dapat membuat contoh sederhana untuk menampilkan DSL paling sederhana
Salinan kode adalah sebagai berikut:
Func = (function () {
this.add = function () {
console.log ('1');
kembalikan ini;
};
this.result = function () {
console.log ('2');
kembalikan ini;
};
kembalikan ini;
});
var func = func baru ();
func.add (). result ();
Namun, ini terlihat seperti generator ekspresi.
Generator Ekspresi DSL
Objek Generator Ekspresi menyediakan satu set antarmuka yang koheren yang kemudian dikonversi menjadi panggilan ke API Query Command-Query yang mendasarinya.
API seperti itu, kita dapat melihat di beberapa API tentang database:
Salinan kode adalah sebagai berikut:
var kueri =
SQL ('Pilih Nama, Desc From Widgets')
.Where ('price <', $ (params.max_price), dan,
'clearance =', $ (params.clearge)))
.Orderby ('name asc');
Ada masalah dengan panggilan rantai itu akhir. Kami tidak berakhir dengan kode yang sama seperti di atas, yang sangat membingungkan. . Menambahkan kueri dan akhir tampaknya menjadi hasil yang baik.
lainnya
Metode kaskade
Itu dinyatakan sebagai berikut:
Salinan kode adalah sebagai berikut:
ab ();
ac ();