Apakah Anda sebagai pengembang Javascript menganggap Pola Desain tradisional sebagai hal penting atau kurang penting dibandingkan dengan bahasa / lingkungan lain?
Pola desain klasik tidak berlaku untuk JavaScript.
Apa yang berlaku adalah menulis kode modular dan fungsional.
Anda harus menggunakan campuran Konstruktor dan fungsi kelas satu.
Sebagai pengembang JavaScript, saya pribadi mendorong untuk memperlakukan JavaScript sebagai LISP daripada Java. Jadi cobalah untuk meniru kode gaya fungsional tingkat tinggi daripada mencoba meniru kode OOP klasik.
Harap sebutkan tiga pola desain teratas yang Anda, sebagai pengembang Javascript gunakan secara teratur dan berikan contoh bagaimana mereka telah membantu dalam pengembangan Javascript Anda.
Sekali lagi pola desain tidak benar-benar berlaku banyak tetapi di bawah ini adalah tiga konstruksi penting.
- Penggunaan penutupan
- Penggunaan fungsi kelas satu
- Penggunaan pabrik Obyek dengan atau tanpa
new
Silakan tinggalkan beberapa jenis konteks di mana saya dapat menunjukkan contoh teknik semacam ini dibandingkan dengan melakukan jenis kode yang sama menggunakan pola desain tradisional.
Mari kita lihat beberapa Pola Desain klasik dan bagaimana menerapkannya dalam js serta pola alternatif yang lebih cocok untuk js itu sendiri:
Pola Pengamat:
Dalam node.js
hal ini sederhana saja events.EventEmitter
. Dalam jQuery
hal ini adalah $.fn.bind
&& $.fn.trigger
. Dalam backbone
hal ini Backbone.Events.trigger
dan Backbone.Events.bind
. Ini adalah pola yang sangat umum digunakan dalam kode sehari-hari.
Saya tidak pernah berhenti dan berpikir, "Hei, saya menggunakan pola pengamat di sini!". Tidak, ini hanya cara tingkat rendah untuk menyampaikan pesan atau cara untuk mengubah perubahan.
Sebagai contoh di backbone, semua tampilan MVC berikatan dengan onchange
acara model sehingga mengubah model membuat perubahan apa pun secara otomatis ke tampilan. Ya ini adalah pola yang kuat, tetapi penggunaannya sangat umum dalam pemrograman berbasis acara yang tidak disadari menggunakannya di mana-mana.
Dalam WebSocket
prototcol yang kami miliki .on
yang kami gunakan untuk mengikat on("message", ...
acara. Sekali lagi ini sangat umum tetapi ini adalah pengamat pada aliran daripada OOP klasik Anda while (byte b = Stream.ReadNextByte())
.
Ini semua adalah penggunaan kuat dari pola Pengamat. Tetapi ini bukan pola yang Anda gunakan. Ini adalah bagian sederhana dari bahasa ini. Ini hanya kode.
Pola Memento:
Ini hanyalah JSON. Hal ini memungkinkan Anda untuk mengelompokkan status suatu objek sehingga Anda dapat membatalkan tindakan.
function SomeObject() {
var internalState;
this.toJSON = function() {
return internalState;
}
this.set = function(data) {
internalState = data;
}
this.restore = function(json) {
internalState = JSON.parse(json);
}
}
var o = new SomeObject();
o.set("foo"); // foo
var memento = JSON.stringify(o);
o.set("bar"); // bar
o.restore(memento);
Dalam JavaScript, kami mendukung API untuk kenang-kenangan. Cukup tentukan metode yang dipanggil toJSON
pada objek apa pun. Ketika Anda memanggilnya JSON.stringify
akan secara internal memanggil .toJSON
objek Anda untuk mendapatkan data nyata yang ingin Anda serialkan ke JSON.
Ini memungkinkan Anda untuk membuat snapshot dari kode Anda secara sepele.
Sekali lagi saya tidak menyadari ini pola kenang-kenangan. Ini hanya menggunakan alat serialisasi yaitu JSON.
Pola Negara / Pola Strategi:
Anda tidak perlu pola keadaan. Anda memiliki fungsi kelas satu dan tipe dinamis. Cukup menyuntikkan fungsi atau mengubah properti dengan cepat.