ฉันรู้ว่าคำถามข้างต้นอาจทำให้เกิดอะไรขึ้นบ้าง แต่ขอให้ฉันพยายามอธิบาย:
ฉันกำลังพยายามสรุปแนวคิดที่เกี่ยวข้องสองอย่างโดยทั่วไปแล้วรูปแบบ Saga ( http://www.rgoarchitects.com/Files/SOAPatterns/Saga.pdf ) ร่วมกับ Event-sourcing (แนวคิด DDD) : http://en.wikipedia.org/wiki/Domain-driven_design )
โพสต์ที่ดีที่รวมเข้าด้วยกัน: https://blog.jonathanoliver.com/cqrs-sagas-with-event-sourcing-part-ii-of-ii/
ฉันได้รับคำถามในหนึ่งนาที แต่ฉันคิดว่าฉันต้องพยายามสรุปสิ่งที่ฉันเข้าใจก่อน (ซึ่งอาจผิดพลาดได้โปรดแก้ไขให้ถูกต้องหากเป็นกรณีนี้) เนื่องจากสิ่งนี้อาจส่งผลกระทบต่อสาเหตุที่ฉัน ถามคำถามเพื่อเริ่มต้นด้วย:
- รูปแบบ Saga คือนายหน้าประเภทหนึ่งที่ให้การกระทำ (ผู้ใช้ปลายทางอัตโนมัติ ฯลฯ โดยพื้นฐานแล้วอะไรก็ตามที่กำลังจะเปลี่ยนข้อมูล) จะแบ่งการกระทำนั้นในกิจกรรมทางธุรกิจและส่งกิจกรรมเหล่านี้เป็นข้อความไปยัง Message Bus ซึ่ง ในทางกลับกันส่งไปยังรากรวมที่เกี่ยวข้องที่จะได้รับการดูแล
- รากรวมเหล่านี้สามารถทำงานได้อย่างสมบูรณ์แบบอัตโนมัติ (แยกความกังวล, ปรับขยายได้ดี ฯลฯ )
- Saga-instance นั้นไม่มีตรรกะทางธุรกิจใด ๆ ที่มีอยู่ในรากรวมที่มันส่งกิจกรรมไปให้ 'ตรรกะ' เพียงอย่างเดียวที่มีอยู่ใน Saga คือ 'กระบวนการ' - ตรรกะ (มักใช้เป็น Statemachine) ซึ่งพิจารณาจากการกระทำที่ได้รับ (เช่นเดียวกับเหตุการณ์ติดตาม) จะทำอย่างไร (เช่น: กิจกรรมที่จะส่ง)
- รูปแบบ Saga ใช้รูปแบบธุรกรรมแบบกระจาย Ie: เมื่อหนึ่งในรากรวม (ซึ่งทำงานได้อย่างอิสระอีกครั้งโดยไม่ทราบว่ามีอยู่จริง) ล้มเหลวการกระทำทั้งหมดอาจต้องย้อนกลับ
- สิ่งนี้ถูกนำไปใช้โดยมีรากรวมทั้งหมดเมื่อเสร็จสิ้นการรายงานกิจกรรมของพวกเขากลับไปที่ Saga (ในกรณีที่ประสบความสำเร็จเช่นเดียวกับข้อผิดพลาด)
- ในกรณีที่รากรวมทั้งหมดคืนความสำเร็จ Statemachine ภายในถ้า Saga พิจารณาว่าจะทำอย่างไรต่อไป (หรือตัดสินใจว่าจะทำเสร็จ)
- ในกรณีของความล้มเหลว Saga จะส่งต่อไปยังรากรวมทั้งหมดที่เข้ามามีส่วนร่วมในการกระทำครั้งสุดท้ายที่เรียกว่า Compensation Action เช่น: การกระทำเพื่อยกเลิกการกระทำสุดท้ายที่รากรวมได้
- นี่อาจเป็นเพียงการทำ 'ลบ 1 โหวต' หากการกระทำนั้นเป็น "บวก 1 คะแนน" แต่มันอาจซับซ้อนกว่าเช่นการกู้คืนโพสต์บล็อกในเวอร์ชันก่อนหน้า
- การจัดหากิจกรรม (ดูบล็อกของการรวมทั้งสอง) มีเป้าหมายที่จะทำให้การบันทึกผลลัพธ์ของแต่ละกิจกรรมที่แต่ละรากรวมรวมที่ดำเนินการกับศูนย์จัดเก็บเหตุการณ์ส่วนกลาง (การเปลี่ยนแปลงที่เรียกว่า 'เหตุการณ์' ในบริบทนี้)
- ที่จัดเก็บกิจกรรมนี้เป็น 'เวอร์ชั่นจริงของความจริง' และสามารถใช้เพื่อเล่นซ้ำสถานะของเอนทิตีทั้งหมดได้ง่ายๆโดยการวนซ้ำเหตุการณ์ที่เก็บไว้ (เป็นหลักเช่นบันทึกเหตุการณ์)
- การรวมสอง (เช่น: การปล่อยให้รูทรวมใช้การจัดหากิจกรรมเพื่อบันทึกการเปลี่ยนแปลงภายนอกก่อนที่จะรายงานกลับไปที่ Saga) ทำให้มีความเป็นไปได้ที่ดีซึ่งหนึ่งในนั้นเกี่ยวข้องกับคำถามของฉัน ...
ฉันรู้สึกว่าฉันต้องถอดสิ่งนี้ออกจากไหล่ของฉันเพราะมันเป็นเรื่องที่เข้าใจได้ในครั้งเดียว รับบริบท / ความคิดนี้ (อีกครั้งโปรดแก้ไขหากผิด)
คำถาม:เมื่อรูทรวมได้รับการชดเชยการกระทำและถ้ารูทการรวมนั้นมีการเอาต์ซอร์ซมันเป็นการเปลี่ยนแปลงสถานะโดยใช้การจัดหากิจกรรมการกระทำที่ชดเชยในทุกสถานการณ์จะไม่ถูกลบในเหตุการณ์สุดท้ายใน Event Store ได้รับ Root Root (สมมติว่าการใช้งานคงอยู่สามารถลบได้)
นั่นจะทำให้รู้สึกถึงฉันมาก (และจะเป็นประโยชน์อย่างมากจากการรวมกันนี้) แต่อย่างที่ฉันบอกว่าฉันอาจจะทำให้สมมติฐานเหล่านี้ขึ้นอยู่กับความเข้าใจที่ไม่ถูกต้อง / ไม่สมบูรณ์ของแนวคิดเหล่านี้
ฉันหวังว่านี่จะไม่ได้ยืดยาวเกินไป
ขอบคุณ