Mari kita asumsikan bahwa kita ingin menerapkan subsistem keamanan kecil untuk aplikasi keuangan yang memperingatkan pengguna melalui email jika pola aneh terdeteksi. Untuk contoh ini, polanya akan terdiri dari tiga transaksi seperti yang digambarkan. Subsistem keamanan dapat membaca acara dari sistem utama dari antrian.
Yang ingin saya dapatkan adalah peringatan yang merupakan konsekuensi langsung dari peristiwa yang terjadi dalam sistem, tanpa representasi perantara yang memodelkan keadaan pola saat ini.
- Pemantauan diaktifkan
- Transaksi diproses
- Transaksi diproses
- Transaksi diproses
- Peringatan dipicu (id: 123)
- Email untuk lansiran terkirim (untuk id: 123)
- Transaksi diproses
Dengan memikirkan hal ini, saya pikir event sourcing dapat diterapkan di sini dengan sangat baik, meskipun saya memiliki pertanyaan tanpa jawaban yang jelas. Peringatan yang dipicu dalam contoh ini memiliki efek samping yang jelas, email harus dikirim, keadaan yang seharusnya hanya terjadi sekali. Karena itu, seharusnya tidak terjadi ketika memutar ulang semua peristiwa agregat.
Sampai taraf tertentu, saya melihat email yang perlu dikirim mirip dengan materialisasi yang dihasilkan oleh sisi permintaan yang telah saya lihat berkali-kali dalam literatur sumber CQRS / Event, dengan perbedaan yang tidak begitu halus sekalipun.
Dalam literatur ini, sisi permintaan dibangun dari penangan acara yang dapat menghasilkan materialisasi negara pada titik tertentu membaca lagi semua peristiwa. Namun dalam hal ini, itu tidak dapat dicapai persis seperti itu karena alasan yang dijelaskan sebelumnya. Gagasan bahwa setiap negara bersifat sementara tidak berlaku dengan baik di sini . Kita perlu mencatat fakta bahwa peringatan dikirim ke suatu tempat.
Solusi mudah bagi saya adalah memiliki tabel atau struktur yang berbeda tempat Anda menyimpan catatan peringatan yang sebelumnya dipicu. Karena kami memiliki ID, kami dapat memeriksa apakah peringatan dengan ID yang sama dikeluarkan sebelumnya. Memiliki informasi ini akan membuat idempotent SendAlertCommand. Beberapa perintah dapat dikeluarkan, tetapi efek samping hanya akan terjadi sekali.
Bahkan dengan memikirkan solusi itu, saya tidak tahu apakah ini merupakan petunjuk bahwa ada sesuatu yang salah dengan arsitektur ini untuk masalah ini.
- Apakah pendekatan saya benar?
- Apakah ada tempat di mana saya dapat menemukan informasi lebih lanjut tentang ini?
Sungguh aneh bahwa saya belum dapat menemukan informasi lebih lanjut tentang ini. Mungkin saya telah menggunakan kata-kata yang salah.
Terima kasih banyak!