Saya menemukan desain Event Sourcing dan saya ingin menggunakan dalam aplikasi di mana klien REST diperlukan (RESTful to be exact). Namun saya gagal menghubungkan ini bersama-sama karena REST cukup mirip CRUD dan sumber acara berbasis tugas. Saya bertanya-tanya bagaimana Anda bisa merancang pembuatan perintah berdasarkan permintaan ke server REST. Pertimbangkan contoh ini:
Dengan REST Anda dapat menempatkan negara baru ke sumber daya yang disebut File. Dalam satu permintaan Anda dapat mengirim nama file baru, Anda dapat mengubah folder induk dan / atau mengubah pemilik file dan sebagainya.
Bagaimana membangun server sehingga saya bisa menggunakan sumber acara. Saya sedang memikirkan kemungkinan-kemungkinan ini:
Tentukan pada server yang bidang diubah dan membuat perintah yang sesuai (
RenameFileCommand
,MoveFileCommand
,ChangeOwnerCommand
, ...) dan pengiriman ini secara individual. Namun dalam pengaturan ini, masing-masing perintah dapat gagal membiarkan orang lain keluar dari transaksi dan dengan demikian keluar dari "atom" perubahan ke sumber daya.Dispatch hanya satu perintah (
UpdateFileCommand
) dan dalam penangan perintah, lebih tepatnya di agregat, menentukan bidang yang berubah dan mengirim peristiwa individu, bukan (FileRenamedEvent
,FileMovedEvent
,OwnerChangedEvent
, ...)Yang ini saya tidak suka sama sekali: Dalam permintaan ke server saya akan menentukan dalam header yang perintah untuk digunakan, karena UI masih berbasis tugas (tetapi komunikasi dilakukan melalui REST). Namun itu akan gagal dalam penggunaan komunikasi REST lainnya (misalnya dalam aplikasi eksternal) karena mereka tidak terikat untuk mengubah hanya satu bidang dalam satu permintaan. Saya juga membawa kopling yang cukup besar ke backend berbasis UI, REST, dan ES.
Yang mana yang Anda inginkan atau ada cara yang lebih baik untuk menangani ini?
Catatan: aplikasi ditulis dalam Java dan Axon Framework untuk event-sourcing.