Dikatakan bahwa di CQRS mudah untuk memperbaiki bug, Anda cukup memindahkan dan kemudian memutar ulang acara tersebut.
Tetapi, bagaimana jika salah satu peristiwa menyebabkan sistem eksternal yang tidak dalam kendali Anda untuk "mengirimkan barang" kepada pelanggan jika Anda hanya memutar ulang acara, barang tersebut akan dikirim dua kali.
Bagaimana Anda mengatasinya?
Dari artikel sumber acara Martin Fowler :
Jadi, ketika Anda perlu mengembalikan keadaan sistem Anda ke saat tertentu saat Anda memutar ulang kondisi yang disimpan , bukan penangan acara, hingga saat itu.
Yang sedang berkata, jika Anda hanya bekerja dengan data negara, seharusnya tidak ada efek pada sistem eksternal. Kecuali jika Anda memiliki pemicu atau pengamat di toko acara Anda dalam hal ini Anda harus menonaktifkannya selama pemulihan. Karena Anda mengatakan bahwa Anda tidak memiliki kendali atas sistem eksternal, seharusnya tidak ada upaya untuk memulihkan keadaannya dengan menggunakan API yang terbuka karena Anda tidak tahu apa efek samping yang mungkin terjadi pada sistem mereka. Jika pemulihan menempatkan sistem dalam kondisi peralihan (mis. Karena operasi yang gagal dalam sistem eksternal) ini seharusnya tidak berada dalam tanggung jawab replay peristiwa.
sumber
Untuk memilih contoh spesifik, mari pertimbangkan bagaimana pendekatan "setidaknya satu kali" untuk efek samping dapat bekerja.
Jadi model domain melacak apa yang perlu dilakukan; tetapi meninggalkan tindakan aktual ke aplikasi
Dalam konteks menjalankan perintah, ide dasarnya terlihat sama. Efek samping yang sebenarnya terjadi di luar transaksi yang memperbarui model.
Jadi tes unit untuk model Anda bisa terlihat seperti
Poin utama di sini adalah
sumber