Saya pada dasarnya mencoba untuk membungkus kepala saya di sekitar konsep CQRS dan konsep terkait.
Meskipun CQRS tidak harus memasukkan Messaging dan Event Sourcing, itu tampaknya merupakan kombinasi yang baik (seperti yang dapat dilihat dengan banyak contoh / blogpost yang menggabungkan konsep-konsep ini)
Diberi kasus penggunaan untuk perubahan keadaan untuk sesuatu (katakanlah untuk memperbarui Pertanyaan tentang SO), apakah Anda menganggap aliran berikut ini benar (seperti dalam praktik terbaik)?
Sistem mengeluarkan agregat UpdateQuestionCommand yang dapat dipisahkan menjadi beberapa perintah yang lebih kecil: UpdateQuestion yang ditargetkan pada Pertanyaan Agregat Root, dan UpdateUserAction (untuk menghitung poin, dll) yang ditargetkan pada User Aggregate Root. Ini dikirim secara tidak sinkron menggunakan pengiriman pesan titik-ke-titik.
Akar agregat melakukan tugasnya masing-masing dan jika semuanya berjalan dengan baik, masing-masing, QuestionUpdated dan UserActionUpdated, yang berisi status yang di-outsourcing-kan ke Event Store .. untuk tetap bertahan yadayada, hanya untuk lengkap, tidak benar-benar intinya di sini.
Acara ini juga diletakkan di antrian pub / sub untuk penyiaran. Setiap pelanggan (di antaranya kemungkinan satu atau beberapa Proyektor yang membuat Tampilan Baca) bebas untuk berlangganan acara ini.
Pertanyaan umum: Apakah ini memang praktik terbaik, bahwa Perintah dikomunikasikan Point-to-Point (yaitu: Penerima diketahui) sedangkan acara disiarkan (Yaitu: penerima tidak diketahui)?
Dengan asumsi di atas, apa keuntungan / kerugian dari membiarkan Perintah disiarkan melalui pub / sub alih-alih point-to-point?
Sebagai contoh: Ketika menyiarkan Perintah saat menggunakan Saga bisa menjadi masalah, karena peran mediasi yang harus dimainkan Saga jika terjadi kegagalan salah satu akar agregat terhambat, karena saga tidak tahu akar agregat mana yang dimulai. .
Di sisi lain, saya melihat keuntungan (fleksibilitas) ketika perintah penyiaran diizinkan.