Pentingnya Pola Desain dengan Javascript, NodeJs et al

36

Dengan Javascript muncul sebagai bahasa pemrograman di mana-mana dari web selama beberapa tahun ke depan, kerangka kerja baru muncul setiap lima menit dan pemrograman yang digerakkan oleh acara yang memimpin baik sisi server maupun klien:

Apakah Anda sebagai pengembang Javascript menganggap Pola Desain tradisional sebagai hal penting atau kurang penting dibandingkan dengan bahasa / lingkungan lain?

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.

Lewis
sumber
5
Beberapa orang berpendapat bahwa pola desain (terutama yang GoF) adalah tanda-tanda kekurangan bahasa (lihat diskusi ini ). Karena JavaScript bersifat prototypal dan fungsional, saya akan mengatakan bahwa serangkaian pola lain dapat diterapkan / berguna.
sangat tertarik dengan tanggapan ... +1 untuk pertanyaan :)
usoban
2
Buku Pola JavaScript oleh Stoyan Stefanov adalah sumber yang bagus tentang banyak pola yang dapat Anda gunakan di JS. Banyak dari mereka ada khusus untuk JS, dan bukan untuk bahasa lain.
IgorGanapolsky
Javascript memiliki polanya sendiri. Selain buku yang disebutkan oleh Igor, ada juga Addy Osmani Learning Javascript Design Patterns , yang gratis.
user16764

Jawaban:

23

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.

  1. Penggunaan penutupan
  2. Penggunaan fungsi kelas satu
  3. 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.jshal ini sederhana saja events.EventEmitter. Dalam jQueryhal ini adalah $.fn.bind&& $.fn.trigger. Dalam backbonehal ini Backbone.Events.triggerdan 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 onchangeacara 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 WebSocketprototcol yang kami miliki .onyang 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 toJSONpada objek apa pun. Ketika Anda memanggilnya JSON.stringifyakan secara internal memanggil .toJSONobjek 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.

Raynos
sumber
Raynos, Jawaban yang bagus. Sebagai contoh, saya lebih banyak berpikir dari tingkat konseptual. Misalnya: "pola pengamat membantu dalam situasi ..."
@Lewis memilih beberapa pola desain yang Anda suka dan saya akan mencoba menyarankan alternatif fungsional yang lebih tepat nanti.
Raynos
Upaya pendekatan dan jawaban Raynos brilian. Terima kasih.
Lewis
@Lewis saya mencoba untuk melihat lebih banyak pasangan tetapi bingung karena mereka semua disesuaikan untuk bahasa OO klasik yang ketat. jika ada pola desain spesifik lain yang Anda ingin saya perhatikan, beri tahu saya.
Raynos
Anda lupa tentang pola Prototipe - alias javascript bodoh bahkan tidak memiliki oop yang normal ;)
c69
10

Ambil jawaban ini sebagai pendapat subyektif.

Apakah Anda sebagai pengembang Javascript menganggap Pola Desain tradisional sebagai hal penting atau kurang penting dibandingkan dengan bahasa / lingkungan lain?

Jika yang Anda maksud pola desain tradisional seperti Gang of Four , maka sebagian besar tekniknya adalah bahasa / platform agnostik seperti "Program ke antarmuka, bukan implementasi" atau "Komposisi objek objek atas warisan kelas" dan sama pentingnya juga bagi pengembang JavaScript.

Pola yang lebih spesifik seperti kreasi, struktural dan perilaku mungkin atau tidak perlu digunakan dengan cara yang sama atau sesering dalam bahasa lain karena fitur bahasa dapat memengaruhi penggunaannya secara luas. Karena itu, beberapa bahasa (termasuk JavaScript) memiliki pola desain sendiri berdasarkan fungsionalitas atau gula sintaksis yang mereka tawarkan.

Secara umum saya akan mengatakan bahwa pola desain tradisional sama pentingnya dengan mereka dalam bahasa lain, tetapi pola spesifik JavaScript lebih penting daripada yang tradisional.

beri nama tiga pola desain teratas Anda, sebagai pengembang Javascript gunakan secara teratur dan berikan contoh bagaimana mereka telah membantu dalam pengembangan Javascript Anda

Di antara Pola Desain Esensial JavaScript saya sebagian besar menggunakan ini:

1. Pola konstruktor (Dengan Prototipe)

Terutama di sisi server ketika menulis hal-hal node.js, karena itu sangat cocok untuk menulis modul meskipun tidak memiliki enkapsulasi asli. Juga populer untuk banyak pengembang lain jika Anda menelusuri repositori di GitHub, jadi keakraban dengan pola ini dapat membantu Anda lebih memahami kode lain.

2. Mengungkap Pola Modul

Menawarkan modularitas dengan enkapsulasi.

3. Pola KERING

Ini agak khusus skenario, meskipun setiap pengembang harus menggunakannya sebanyak (im) mungkin.

yojimbo87
sumber
Terima kasih! Jawaban yang bagus, dan jenis respons yang saya harapkan. Meskipun pertanyaannya dapat dipandang subyektif, respons yang baik seperti ini menunjukkan bahwa ada jawaban yang tepat. Akan menunggu lebih banyak tanggapan sebelum 'keluar'.
2

Pola desain diajarkan di kelas desain untuk CS. Mereka tidak penting, tetapi sangat membantu jika Anda dapat menemukan situasi analog untuk memiliki solusi yang telah dipikirkan.

Ini juga memungkinkan programmer untuk berkomunikasi dengan lebih mudah. Anda dapat berbicara dengan rekan kerja Anda dalam hal polanya juga. Jika Anda mengatakan di sini saya memiliki Pengamat saya, maka cukup dipahami apa yang sedang terjadi.

Orang-orang secara alami akan menemukan solusi yang sesuai dengan pola desain sendiri, tetapi pola desain membantu mendefinisikan terminologi dan ide-ide standar yang dapat membantu.

Tidak ada yang super luar biasa tentang polanya, hal terbaik adalah bahwa mereka adalah ide yang dikanonisasi dan didefinisikan dengan cara yang berulang kali berguna.

stiker khusus
sumber
1

Apakah Anda sebagai pengembang Javascript menganggap Pola Desain tradisional sebagai hal yang penting atau kurang penting

Mereka sangat penting.

Ini karena konsep untuk solusi yang dapat digunakan kembali dapat melampaui bahasa. - perubahan sintaksis - perubahan implementasi - Notion for pattern masih ada.

Pengembang dari bahasa apa pun dapat mempelajari JS lanjutan dengan mempelajari pola, bukan sintaksis. Mereka yang tidak tahu ini tidak ada.

Harap sebutkan tiga pola desain teratas Anda, sebagai pengembang Javascript digunakan secara teratur

Ada pola yang sering digunakan yang beberapa orang akan "membantah". Namun, mereka baik untuk diketahui karena mereka sangat umum dan kuat di JS canggih.

1- Namespace - bungkus kode Anda dalam suatu objek.

var x = (fungsi () {}) ();

2- Konfigurasi Obyek, pola seperti pabrik. -Mass objek ke fungsi, bukan sekelompok vars.

var product = factory ({});

3- Fungsi panggilan balik. - Lulus fungsi sebagai parameter, untuk dipanggil ketika tugas selesai.

function longTask (function () {// panggil saya jika sudah selesai});

Seperti yang saya katakan, beberapa orang mungkin berpendapat bahwa ini bukan pola, tetapi mereka sangat umum dan sangat kuat, dan harus disebutkan karena mereka memang sangat berguna solusi yang dapat digunakan kembali untuk masalah umum. Yang merupakan definisi Pola Desain.

Pertanyaan yang sangat bagus

Semoga itu bisa membantu.

Jack Stone
sumber