สมมติว่าเราต้องการใช้ระบบย่อยความปลอดภัยขนาดเล็กสำหรับแอปพลิเคชันทางการเงินที่เตือนผู้ใช้ทางอีเมลหากตรวจพบรูปแบบแปลก ๆ สำหรับตัวอย่างนี้รูปแบบจะประกอบด้วยสามธุรกรรมตามที่อธิบายไว้ ระบบย่อยความปลอดภัยสามารถอ่านเหตุการณ์จากระบบหลักจากคิว
สิ่งที่ฉันต้องการได้รับคือการแจ้งเตือนที่เป็นผลโดยตรงจากเหตุการณ์ที่เกิดขึ้นในระบบโดยไม่มีการแสดงสื่อกลางที่เป็นแบบจำลองสถานะปัจจุบันของรูปแบบ
- เปิดใช้งานการตรวจสอบแล้ว
- ประมวลผลธุรกรรมแล้ว
- ประมวลผลธุรกรรมแล้ว
- ประมวลผลธุรกรรมแล้ว
- ทริกเกอร์แจ้งเตือน (id: 123)
- ส่งอีเมลเพื่อรับการแจ้งเตือน (สำหรับ id: 123)
- ประมวลผลธุรกรรมแล้ว
เมื่อนึกถึงสิ่งนี้ฉันคิดว่าการจัดหากิจกรรมสามารถทำได้ที่นี่เป็นอย่างดีแม้ว่าฉันจะมีคำถามที่ไม่มีคำตอบที่ชัดเจน การแจ้งเตือนที่ทริกเกอร์ในตัวอย่างมีผลข้างเคียงที่ชัดเจนจำเป็นต้องส่งอีเมลสถานการณ์ที่ควรเกิดขึ้นเพียงครั้งเดียวเท่านั้น ดังนั้นจึงไม่ควรเกิดขึ้นเมื่อเล่นซ้ำเหตุการณ์ทั้งหมดของการรวมซ้ำ
ในระดับหนึ่งฉันเห็นอีเมลที่ต้องส่งคล้ายกับการสร้างเนื้อหาที่สร้างขึ้นโดยฝ่ายแบบสอบถามที่ฉันเห็นมาหลายครั้งในวรรณกรรมการจัดหา CQRS / กิจกรรมด้วยความแตกต่างที่ไม่ลึกซึ้งนัก
ในวรรณคดีนี้ด้านแบบสอบถามถูกสร้างขึ้นจากตัวจัดการเหตุการณ์ที่สามารถสร้างเป็นตัวเป็นตนของรัฐที่จุดที่กำหนดให้อ่านเหตุการณ์ทั้งหมดอีกครั้ง ในกรณีนี้แม้ว่าจะไม่สามารถบรรลุได้อย่างสมบูรณ์เช่นนั้นด้วยเหตุผลที่อธิบายไว้ก่อนหน้านี้ ความคิดที่ว่าทุกรัฐเป็นชั่วคราวใช้ไม่ได้เป็นอย่างดีที่นี่ เราต้องบันทึกความจริงที่ว่าการแจ้งเตือนถูกส่งไปที่ไหนสักแห่ง
ทางออกที่ง่ายสำหรับฉันคือการมีตารางหรือโครงสร้างที่แตกต่างกันซึ่งคุณเก็บบันทึกการแจ้งเตือนที่ถูกเรียกใช้ก่อนหน้านี้ เนื่องจากเรามี ID เราจะสามารถตรวจสอบว่ามีการออกการแจ้งเตือนด้วย ID เดียวกันก่อนหน้านี้หรือไม่ การมีข้อมูลนี้จะทำให้ SendAlertCommand idempotent สามารถออกคำสั่งได้หลายคำสั่ง แต่ผลข้างเคียงจะเกิดขึ้นเพียงครั้งเดียว
แม้จะมีวิธีแก้ปัญหานั้นในใจฉันก็ไม่รู้ว่านี่เป็นคำใบ้ว่ามีบางอย่างผิดปกติกับสถาปัตยกรรมนี้สำหรับปัญหานี้หรือไม่
- วิธีการของฉันถูกต้องหรือไม่
- มีสถานที่ใดบ้างที่ฉันสามารถค้นหาข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้?
มันแปลกที่ฉันไม่สามารถหาข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ บางทีฉันอาจใช้ข้อความที่ไม่ถูกต้อง
ขอบคุณมาก!