Saya menyadari pertanyaan di atas mungkin menimbulkan beberapa 'apa ??', tetapi izinkan saya mencoba menjelaskan:
Saya mencoba membungkus kepala saya pada beberapa konsep terkait, pada dasarnya pola-Saga ( http://www.rgoarchitects.com/Files/SOAPatterns/Saga.pdf ) dikombinasikan dengan Event-sourcing (A DDD-concept : http://en.wikipedia.org/wiki/Domain-driven_design )
Sebuah pos bagus yang merangkumnya bersama: https://blog.jonathanoliver.com/cqrs-sagas-with-event-sourcing-part-ii-ofofiiii/
Saya mendapatkan pertanyaan dalam satu menit, tetapi saya pikir saya harus mencoba untuk meringkas apa yang saya pahami terlebih dahulu (yang mungkin salah, jadi tolong perbaiki jika itu masalahnya) karena ini mungkin berdampak pada mengapa saya mengajukan pertanyaan untuk memulai dengan:
- Pola Saga adalah sejenis broker yang memberikan tindakan (pengguna akhir, otomatis, dll. Pada dasarnya apa pun yang akan mengubah data) membagi tindakan itu dalam aktivitas bisnis dan mengirimkan masing-masing aktivitas ini sebagai pesan ke Bus Pesan yang pada gilirannya mengirimkannya ke akar agregat masing-masing untuk dijaga.
- Akar agregat ini dapat beroperasi sepenuhnya secara mandiri (pemisahan keprihatinan yang bagus, skalabilitas yang luar biasa, dll.)
- Sebuah instance Saga sendiri tidak mengandung logika bisnis apa pun, yang terkandung dalam akar agregat yang dikirimnya aktivitas. Satu-satunya 'logika' yang terkandung dalam Saga adalah 'proses'-logika, (sering diimplementasikan sebagai Statemachine), yang menentukan berdasarkan tindakan yang diterima (serta acara tindak lanjut) apa yang harus dilakukan (yaitu: kegiatan apa yang harus dikirim)
- Saga-pola menerapkan semacam pola transaksi terdistribusi. Yaitu: ketika salah satu akar agregat (yang lagi-lagi bekerja secara mandiri, tanpa mengetahui keberadaan satu sama lain) gagal, seluruh tindakan mungkin harus dibatalkan.
- Ini diimplementasikan dengan memiliki semua akar agregat, setelah menyelesaikan laporan aktivitas mereka kembali ke Saga. (Dalam hal sukses dan kesalahan)
- Jika semua akar agregat mengembalikan sukses, statemachine internal jika Saga menentukan apa yang harus dilakukan selanjutnya (atau memutuskan itu selesai)
- Jika terjadi kegagalan, Saga mengeluarkan semua akar agregat yang mengambil bagian dalam tindakan terakhir yang disebut Tindakan Kompensasi, yaitu: tindakan untuk membatalkan tindakan terakhir yang dilakukan masing-masing akar agregat.
- Ini mungkin hanya melakukan 'Minus 1 suara' jika tindakan itu "ditambah 1 suara" tetapi bisa lebih rumit seperti mengembalikan posting blog ke versi sebelumnya.
- Pengadaan-acara (lihat posting blog yang menggabungkan keduanya) bertujuan untuk mengeksternalisasi menyimpan hasil dari setiap kegiatan yang dilakukan oleh masing-masing akar agregat ke Toko Acara yang terpusat (perubahannya disebut 'peristiwa' dalam konteks ini)
- Toko Acara ini adalah 'versi tunggal kebenaran' dan dapat digunakan untuk memutar ulang keadaan semua entitas hanya dengan mengulangi peristiwa yang disimpan (pada dasarnya seperti log peristiwa)
- Menggabungkan keduanya (yaitu: membiarkan akar agregat menggunakan Peristiwa-sumber untuk melakukan outsourcing menyimpan perubahan mereka sebelum melaporkan kembali ke Saga) memungkinkan banyak kemungkinan bagus, salah satunya menyangkut pertanyaan saya ...
Saya merasa saya harus melepaskan ini dari pundak saya, karena banyak yang harus dipahami dalam sekali jalan. Dengan konteks / pola pikir ini (sekali lagi, harap perbaiki jika salah)
pertanyaannya: Ketika root agregat menerima Tindakan Kompensasi dan jika akar agregat itu melakukan outsourcing perubahan keadaan menggunakan sumber-Peristiwa, bukankah Tindakan Kompensasi dalam semua situasi hanya akan menghapus peristiwa terakhir di Toko Acara untuk itu diberikan Agregat Root? (Dengan asumsi implementasi yang bertahan memungkinkan penghapusan)
Itu masuk akal bagi saya banyak (dan akan menjadi manfaat besar lain dari kombinasi ini) tetapi seperti yang saya katakan saya mungkin membuat asumsi ini berdasarkan pada pemahaman konsep-konsep ini yang salah / tidak lengkap.
Saya harap ini tidak terlalu panjang lebar.
Terima kasih.