จากการพูดคุยเรื่องของ Event-based architecture นั้น มักจะเจอ 2 คำคือ
- Domain Event
- Event Sourcing
คำถามที่น่าสนใจคือมันคืออะไร ?
ทำหน้าที่อะไรกันแน่
ก็เลยทำการอธิบายแบบสั้น ๆ ไว้หน่อย
Domain Event คืออะไร ?
ใช้อธิบายเหตุการณ์ที่เกิดขึ้นภายใน domain หรือกลุ่มงานในขอบเขตนั้น ๆ
เป็นภาษาที่ใช้คุยกันใน domain นั้น ๆ
ทั้ง Domain expert, Business, Development
ต้องตกลงและเข้าใจร่วมกัน
จึงเป็นหัวใจหลักของการทำงานร่วมกัน
ชื่อของ Domain Event นั้น ต้องไม่ผู้กับเทคโนโลยีใด ๆ
ยกตัวอย่างเช่น
- ผู้ใช้งานทำงานลงทะเบียนแล้ว
- ผู้ซื้อได้รับสินค้าเรียบร้อยแล้ว
- การชำระเงินไม่สำเร็จ เพราะว่าหมดระยะเวลาการชำระเงิน
Domain Event นั้นสามารถเกิดได้ทั้ง
ภายในขอบเขตงานของตัวเอง หรือข้ามขอบเขตงานอื่น ๆ ได้เช่นกัน
เพื่อใช้ในการทำงานร่วมกันเท่านั้น
ยกตัวอย่างเช่น การทำงานในรูปแบบ CQRS เป็นต้น
แต่หน้าที่หลักของ Domain Event คือ
ใช้สำหรับการติดต่อสื่อสารและทำงานร่วมกันข้ามขอบเขตการทำงานต่าง ๆ ยกตัวอย่างเช่นมี 3 ส่วนงานคือ
- Order
- Invoice
- Delivery
เมื่อในส่วนงาน Order มีการสร้าง Order หรือคำสั่งซื้อสำเร็จแล้ว
ทางส่วนงาน Invoice และ Delivery ก็จะต้องรู้หรือทำงานตามด้วย
ดังนั้นเหตุการณ์คำสั่งซื้อสำเร็จ จึงเป็นหนึ่งใน Domain Event นั่นเอง
จากแนวคิดนี้ทำให้แต่ละส่วนงานเป็นอิสระแก่กัน
ทำข้อตกลงหรือ contract กันผ่าน Domain Event
แต่ปัญหาที่ตามมาคือ เราจะทำการจัดเก็บ event นี้อย่างไร ?
ข้อมูลใน Event จะเป็นอย่างไร ?
ตำตอบที่ได้มาคือ Event Sourcing
Event Sourcing คืออะไร ?
Event Sourcing ensures that all changes to application state are stored as a sequence of events.
ทำการเก็บข้อมูลของทุก ๆ การเปลี่ยนแปลงไว้
ในรูปแบบของ Event stream นั่นเอง
โดยข้อมูลจะเรียงลำดับตามเวลาที่ Event เกิดขึ้น
และแต่ละ Event จะไม่สามารถแก้ไขได้ (Immutability)
ดังนั้น Event ที่จัดเก็บใน Event sourcing นั้น
เหมือนกับ local storage ของแต่ละขอบเขตงานนั้น ๆ
ดังนั้นมักจะไม่ expose หรือใช้แบบ global หรือใช้งานข้ามขอบเขตงาน
มิเช่นนั้นจะทำการแต่ละส่วนงานผูกมัดกันเกินไป (Tight coupling)
แต่ถ้าต้องทำการ expose Event (Domain Event)
เพื่อให้ขอบเขตงานอื่น ๆ ใช้งานด้วย
อาจะ expose ออกไปในรูปแบบต่าง ๆ ดังนี้
- Public API
- Customer/Supplier
- Open Host with Publish/Subscribe
แสดงตัวอย่างของ Open Host with Publish/Subscribe ดังรูป
Reference Websites