Perbedaan antara perintah dan peristiwa dalam komunikasi bus tampaknya agak samar bagi saya. Saya tahu bahwa perintah harus dijalankan sekali saja, sementara suatu peristiwa dapat ditangani beberapa kali, tetapi saya masih tidak yakin kapan harus menggunakan perintah atau acara.
Mari kita lihat sebuah contoh:
Ketika pengguna baru mendaftar ke aplikasi web, kita harus membuatnya akun dan mengirim email konfirmasi.
Membuat akun - ini sepertinya tempat yang tepat untuk mengirim CreateUserCommand
ke bus dan membiarkan komponen khusus menanganinya.
Atau mungkin ini seharusnya tidak diimplementasikan dengan komunikasi bus asinkron? Kami ingin pengguna dapat masuk ke aplikasi segera. Dengan bus kami tidak memiliki jaminan kapan perintah akan dieksekusi.
Mengirim email - setelah komponen membuat akun saya bisa melihat 2 kemungkinan
- Kirim perintah lain ke bus
SendConfirmationEmailCommand
- Publikasikan suatu acara
UserAccountCreatedEvent
Dan daripada membiarkan komponen pengirim email mengambilnya dan melakukan pekerjaannya.
Di satu sisi saya ingin email konfirmasi dikirim sekali saja (menggunakan perintah), di sisi lain, saya percaya ada beberapa komponen yang tertarik pada pengguna yang baru terdaftar. Logger atau mungkin pengirim SMS.
Bagaimana Anda mengimplementasikannya?