Sebagian besar kebingungan antara "passing pesan" dan "berbasis acara" ada hubungannya dengan detail arsitektur vs. implementasi. Saya telah melihat (dan menulis) sistem event driven yang benar-benar menggunakan OS yang disediakan pesan untuk implementasi mereka. Saya kira Anda benar-benar mengacu pada ide-ide arsitektur.
Seperti banyak orang telah menunjukkan "lewat pesan" dan "berbasis acara" tidak cukup istilah yang cukup baik untuk menghindari ambiguitas.
Apa manfaat relatif dari sistem "message passing" vs sistem "event based".
Pesan Berlalu
Saya akan mulai dengan menebak bahwa ketika Anda mengatakan sistem "message passing", Anda berbicara tentang sistem yang satu objek menghabiskan pesan ke objek lain yang spesifik. Ketika saya memikirkan sistem yang didasarkan pada paradigma ini, saya lebih umum memikirkan sistem di mana objek yang mendeteksi sesuatu tahu siapa yang perlu diberitahu tentang sesuatu. (Saya tidak menentukan bagaimana ia tahu, hanya saja itu yang tahu.)
Jenis arsitektur ini sangat baik untuk sistem di mana produsen dan konsumen terkenal. Entah produsen pesan tahu siapa yang harus menerimanya, atau konsumen harus tahu dari siapa menerima pesan itu.
Jika Anda menulis aplikasi perbankan, orang akan berharap Anda benar-benar ingin tahu kepada siapa Anda mengirim transaksi dan dari siapa mereka berasal.
Berbasis Acara
Sistem lain yang saya percaya Anda pikirkan ketika Anda mengatakan sistem "berbasis acara" adalah sistem di mana objek memunculkan "peristiwa" tanpa mengetahui siapa (jika ada orang) yang akan menanggapinya.
Jenis arsitektur yang digerakkan oleh acara ini sangat baik untuk sistem di mana produsen tidak peduli tentang siapa yang mengkonsumsi acara atau di mana konsumen tidak benar-benar peduli tentang siapa yang memproduksi acara tersebut.
Secara umum, sistem ini bagus di mana Anda tidak tahu hubungan antara konsumen dan produsen, dan di mana Anda mengharapkan hubungan menjadi dinamis.
Satu sistem yang saya gunakan dalam hal ini adalah sistem di mana aplikasi sebenarnya terdiri dari modul yang dikonfigurasi secara dinamis (plug-in) yang dimuat pada saat dijalankan. Ketika sebuah modul dimuat, itu akan mendaftar untuk acara yang dipedulikannya. Hasilnya adalah sistem di mana sangat mudah untuk memperluas fungsionalitasnya.
Misalnya, katakanlah kondisi A mengangkat EA Peristiwa yang biasanya menyebabkan respons RA. Objek yang menyebabkan respons RA hanya terdaftar untuk menerima peristiwa EA dan menindaklanjutinya ketika tiba. Sekarang, katakanlah kita ingin menambahkan respons baru ke EA, yang disebut RA_1. Untuk melakukan ini, kami cukup menambahkan objek baru yang mencari EA dan menghasilkan respons RA_1.
Berikut adalah beberapa contoh (menggunakan terminologi Anda):
- "message passing" : Bos Anda memberi tahu Anda untuk mengisi lembar waktu Anda.
- "event driven" : Sekretaris departemen mengirimkan email kepada semua orang yang mengingatkan mereka bahwa waktu mereka jatuh tempo hari ini.