Apa perbedaan antara Pola Pengamat , Terbit / Berlangganan , dan Pengikatan Data ?
Saya mencari-cari sedikit di Stack Overflow dan tidak menemukan jawaban yang baik.
Apa yang saya yakini adalah bahwa pengikatan data adalah istilah umum dan ada berbagai cara untuk mengimplementasikannya seperti Pola Pengamat atau pola Pub / Sub. Dengan pola Pengamat, Observable memperbarui Pengamatnya. Dengan Pub / Sub, 0-banyak penerbit dapat mempublikasikan pesan dari kelas tertentu dan 0-banyak pelanggan dapat berlangganan pesan dari kelas tertentu.
Apakah ada pola penerapan "pengikatan data" lainnya?
Jawaban:
Inilah pendapat saya tentang ketiganya:
Binding Data
Pada dasarnya, pada intinya ini hanya berarti "nilai properti X pada objek Y secara semantik terikat dengan nilai properti A pada objek B. Tidak ada asumsi yang dibuat tentang bagaimana Y mengetahui atau diberi makan perubahan pada objek B.
Observer, atau Observable / Observer
Suatu pola desain dimana suatu benda diimbuhi dengan kemampuan untuk memberi tahu orang lain tentang peristiwa tertentu - biasanya dilakukan dengan menggunakan peristiwa aktual, yang merupakan semacam slot seperti pada objek dengan bentuk fungsi / metode tertentu. Yang diamati adalah orang yang memberikan notifikasi, dan pengamat menerima notifikasi tersebut. Di .net, yang dapat diamati dapat mengekspos suatu peristiwa dan pengamat berlangganan acara tersebut dengan kait berbentuk "pengendali acara". Tidak ada asumsi yang dibuat tentang mekanisme spesifik yang terjadi notifikasi, atau tentang jumlah pengamat yang dapat diberitahukan.
Pub / Sub
Nama lain (mungkin dengan semantik "siaran") dari pola Observable / Observer, yang biasanya menyiratkan citarasa yang lebih "dinamis" - pengamat dapat berlangganan atau berhenti berlangganan notifikasi dan satu yang dapat diamati dapat "berteriak" ke banyak pengamat. Di .NET, orang dapat menggunakan acara standar untuk ini, karena acara adalah bentuk MulticastDelegate, dan juga dapat mendukung pengiriman acara ke beberapa pelanggan, dan juga mendukung berhenti berlangganan. Pub / Sub memiliki makna yang sedikit berbeda dalam konteks tertentu, biasanya melibatkan lebih banyak "anonimitas" antara peristiwa dan eventer, yang dapat difasilitasi oleh sejumlah abstraksi, biasanya melibatkan beberapa "perantara" (seperti antrian pesan) yang mengetahui semua pihak, tetapi masing-masing pihak tidak tahu tentang satu sama lain.
Binding Data, Redux
Dalam banyak pola "seperti MVC", yang dapat diamati memperlihatkan beberapa cara "pemberitahuan perubahan properti" yang juga berisi informasi tentang properti spesifik yang diubah. Pengamat tersirat, biasanya dibuat oleh kerangka kerja, dan berlangganan notifikasi ini melalui beberapa sintaks yang mengikat untuk secara khusus mengidentifikasi objek dan properti, dan "event handler" hanya menyalin nilai baru, berpotensi memicu pembaruan atau logika penyegaran.
Pengikatan data Redux
Implementasi alternatif untuk pengikatan data? Ok, ini yang bodoh:
sumber
Ada dua perbedaan utama antara pola Observer / Observable dan Publisher / Pelanggan:
Pola Observer / Observable sebagian besar diimplementasikan secara sinkron , yaitu observable memanggil metode yang tepat dari semua pengamatnya ketika beberapa peristiwa terjadi. Pola Penerbit / Pelanggan sebagian besar diimplementasikan dalam cara yang tidak sinkron (menggunakan antrian pesan).
Dalam pola Pengamat / Yang Dapat Diobservasi , para pengamat menyadari hal yang dapat diamati . Padahal, di Publisher / Pelanggan , penerbit dan pelanggan tidak perlu saling mengenal . Mereka hanya berkomunikasi dengan bantuan antrian pesan.
Seperti yang Anda sebutkan dengan benar, pengikatan data adalah istilah umum dan dapat diimplementasikan menggunakan metode Observer / Observable atau Publisher / Subscriber. Data adalah Penerbit / Pelanggan.
sumber
pub/sub
acara JS menggunakan. Ini adalah jenis implementasi callback, tetapi ini adalah contoh yang sinkron .Saya sedikit geli bahwa semua jawaban di sini mencoba menjelaskan perbedaan halus antara pola Observer dan Pub / Sub tanpa memberikan contoh konkret. Saya yakin sebagian besar pembaca masih tidak tahu bagaimana menerapkan masing-masing dengan membaca satu sinkron dan yang lainnya asinkron.
Satu hal yang perlu diperhatikan adalah: Tujuan dari pola-pola ini adalah mencoba memisahkan kode
Ini berarti
observable object
memiliki daftar di mana ia menyimpan semuaobservers
(yang biasanya fungsinya). dan dapat melintasi daftar ini dan menjalankan fungsi-fungsi ini saat rasanya menyenangkan.lihat contoh pola pengamat ini untuk detailnya.
Pola ini bagus ketika Anda ingin mendengarkan perubahan data pada suatu objek dan memperbarui tampilan UI lainnya secara bersamaan.
Tetapi Cons adalah Observable hanya memelihara satu array untuk menjaga pengamat (dalam contoh, array adalah
observersList
).Ini TIDAK membedakan bagaimana pembaruan dipicu karena hanya memiliki satu
notify function
, yang memicu semua fungsi yang disimpan dalam array itu.Jika kita ingin mengelompokkan pengamat penangan berdasarkan peristiwa yang berbeda. Kami hanya perlu mengubahnya
observersList
menjadiObject
sejenislihat contoh pubsub ini untuk detailnya.
dan orang menyebut variasi ini sebagai
pub/sub
. Jadi Anda dapat memicu berbagai fungsi berdasarkan yangevents
Anda terbitkan.sumber
Saya setuju dengan kesimpulan Anda tentang kedua pola, namun bagi saya, saya menggunakan Observable ketika saya dalam proses yang sama dan saya menggunakan Pub / Sub dalam skenario antar-proses, di mana semua pihak hanya mengetahui saluran yang sama tetapi tidak semua pihak .
Saya tidak tahu pola lain, atau izinkan saya mengatakan demikian, saya tidak pernah membutuhkan pola lain untuk tugas ini. Bahkan sebagian besar kerangka kerja MVC dan implementasi pengikatan data biasanya menggunakan konsep pengamat secara internal.
Jika Anda tertarik pada komunikasi antar-proses, saya sarankan Anda:
"Pola Integrasi Perusahaan: Merancang, Membangun, dan Menyebarkan Solusi Perpesanan" - http://www.addison-wesley.de/9780321200686.html
Buku ini berisi banyak ide tentang cara mengirim pesan antar proses atau kelas yang dapat digunakan bahkan dalam tugas komunikasi intra-proses (membantu saya memprogram dengan cara yang lebih longgar).
Saya harap ini membantu!
sumber