Saya mencari cara untuk merancang aplikasi ddd dengan konvensi konfigurasi.
Katakanlah agregat "Klien" memiliki perintah yang didefinisikan "FillProfile". Secara logis akan memunculkan acara "ProfileFilled".
Adakah kasus ketika suatu perintah akan meningkatkan lebih dari satu peristiwa, atau di mana suatu perintah akan memunculkan peristiwa yang berbeda berdasarkan pada beberapa logika? Atau apakah ini selalu hubungan 1 - 1 (1 perintah akan selalu menimbulkan tidak ada, atau satu peristiwa dari jenis tertentu).
Saya menanyakan ini karena jika ini adalah fakta, bahwa suatu perintah akan selalu memunculkan peristiwa yang sama, saya dapat membangun sistem konvensi saya berdasarkan fakta itu. Saya tahu bahwa "RaiseEvent" akan menghasilkan "EventRaised" ...
sumber
Jawaban:
Karena Anda menandai pertanyaan Anda dengan "CQRS", saya kira maksud Anda adalah peristiwa dalam konteks "CQRS & Event Sourcing", seperti dijelaskan di sini . Dalam tutorial ini , perbedaan antara peristiwa dan perintah dijelaskan dengan baik:
peristiwa menangkap "hal-hal yang dapat terjadi" yang mendasar dalam sistem Anda, dari sudut pandang sistem.
perintah didefinisikan oleh apa yang pengguna anggap sebagai operasi, dari sudut pandangnya
Dan meskipun ini sering mengarah ke beberapa perintah dan acara dengan korespondensi 1: 1, sudut pandang yang berbeda ini dapat mengarah pada perintah yang memecat lebih dari satu peristiwa, atau peristiwa yang berbeda tergantung pada parameter perintah. Saya bahkan bisa membayangkan kasus-kasus di mana perintah sama sekali tidak membangkitkan suatu peristiwa, tetapi itu akan menjadi kasus yang sangat luar biasa, bukan yang sangat khas.
Misalnya, tutorial menyebutkan acara
dan perintah
Di sini, perintah "OpenTab" akan mengarah ke acara "TabOpened", tetapi perintah PlaceOrder akan mengarah ke acara "DrinksOrdered", "FoodOrdered", atau keduanya.
Bahkan, jika Anda mendesain sistem baru "dari awal", Anda dapat mencoba mendesainnya dengan korespondensi 1: 1 antara perintah dan acara dan lihat seberapa baik skala itu ketika sistem menjadi lebih besar. Anda bahkan dapat mencoba pendekatan hybrid: daftar acara dan perintah dengan korespondensi 1: 1, bersama dengan beberapa perintah tambahan, gabungan. Coba saja seberapa jauh itu menuntun Anda untuk sistem tertentu yang Anda rancang.
sumber
Biasanya satu perintah akan mengarah ke satu acara. Tetapi dalam beberapa kasus bisa juga lebih dari satu, itu tergantung pada implementasi Anda.
Entah perintah Anda memanggil perintah lain dan masing-masing dari mereka menjalankan acara sendiri. Atau perintah Anda melakukan tugas berbeda sendiri dan mengeluarkan beberapa peristiwa. Sebagai contoh:
RegistrasiUserCommand
sumber
UserWasAddedToCrm
? Tulis ulang seluruh aliran Anda?Satu perintah dapat memunculkan banyak acara. Ini hanyalah kesimpulan logis dari satu fakta:
Composite command
ada.Katakanlah Anda memiliki dua perintah, masing-masing membangkitkan suatu peristiwa. Kemudian, Anda membuat perintah gabungan dari keduanya. Dari pandangan seseorang yang menggunakan perintah gabungan, tampaknya seolah-olah perintah itu membangkitkan dua peristiwa.
Jadi tidak ada yang menghentikan Anda dari perintah tunggal meningkatkan beberapa (atau bahkan tidak ada) acara.
sumber