Dalam CQRS / ES, perintah dikirim dari klien ke server dan dialihkan ke penangan perintah yang sesuai. Handler perintah itu memuat agregat dari repositori, dan memanggil beberapa metode di atasnya, dan menyimpannya kembali ke repositori. Acara dihasilkan. Seorang manajer event handler / saga / proses dapat mendengarkan acara ini untuk mengeluarkan perintah.
Jadi, perintah (input) menghasilkan peristiwa (output), yang kemudian dapat mengumpan balik ke sistem lebih banyak perintah (input). Sekarang, apakah ini merupakan praktik yang umum bagi suatu perintah untuk tidak memancarkan peristiwa apa pun, melainkan untuk membuat perintah lain? Pendekatan semacam itu dapat digunakan untuk memaksa eksekusi dalam proses eksternal.
EDIT:
Kasus penggunaan spesifik yang ada dalam pikiran saya adalah pemrosesan rincian pembayaran. Klien mengirimkan PayInvoice
perintah, yang payload-nya meliputi rincian kartu kredit pengguna. Perintah ini PayInvoiceHandler
dikirimkan MakeInvoicePayment
ke proses terpisah, yang bertanggung jawab untuk berinteraksi dengan gateway pembayaran. Jika pembayaran berhasil, suatu InvoicePaid
peristiwa dihasilkan. Jika karena alasan tertentu sistem macet setelah PayInvoice
perintah tetap ada tetapi sebelum MakeInvoicePayment
perintah itu tetap ada, kita dapat melacak ini secara manual (tidak ada pembayaran yang akan dilakukan). Jika sistem crash setelah MakeInvoicePayment
perintah tetap tetapi sebelumInvoicePaid
acara tetap, kami mungkin memiliki situasi di mana kartu kredit pengguna dibebankan tetapi faktur tidak ditandai sebagai telah dibayar. Dalam hal ini, situasinya harus diselidiki secara manual dan faktur secara manual ditandai sebagai berbayar.
Anda akan mendapatkan sistem yang secara arsitektur lebih longgar digabungkan jika Anda hanya memancarkan peristiwa dari suatu perintah. Dengan kata lain, satu perintah seharusnya tidak perlu tahu apa perintah eksternal lainnya untuk mengeluarkan; yang seharusnya menjadi tanggung jawab pihak eksternal (siapa yang harus berlangganan ke acara tersebut, dan bisa, seperti yang Anda sebutkan, seorang manajer saga yang memiliki tanggung jawab koordinasi, atau hanya modul lain yang memiliki ketergantungan pada acara-acara tersebut).
sumber
Tampilan yang disarankan: Udi Dahan tentang Pesan Tepercaya - ini tidak persis seperti yang Anda gambarkan, tetapi terkait erat.
Saya belum pernah melihat orang merekomendasikan latihan itu.
Jawaban singkat: jika Anda tidak menyimpan beberapa keadaan, maka Anda tidak dapat memulihkan perintah enqueued jika Anda gagal setelah mengakui bahwa Anda telah menerimanya.
Jika Anda memutuskan bahwa Anda perlu menyimpan keadaan, tidak jelas bahwa ada keuntungan besar untuk menjadwalkan perintah kedua dari yang pertama, daripada menggunakan event handler.
sumber