โฟลว์เหตุการณ์
ใน FlowEngine คอมโพเนนต์ทั้งหมดของอินเทอร์เฟซเป็นแบบ ขับเคลื่อนด้วยเหตุการณ์ (Event-driven) ครับ/ค่ะ พฤติกรรม การโต้ตอบ และการเปลี่ยนแปลงข้อมูลของคอมโพเนนต์จะถูกทริกเกอร์โดยเหตุการณ์ (Event) และดำเนินการผ่านโฟลว์ (Flow) ครับ/ค่ะ
โฟลว์แบบคงที่เทียบกับโฟลว์แบบไดนามิก
ใน FlowEngine โฟลว์ (Flow) สามารถแบ่งออกได้เป็นสองประเภทครับ/ค่ะ
1. โฟลว์แบบคงที่ (Static Flow)
- ถูกกำหนดโดยนักพัฒนาในโค้ดครับ/ค่ะ
- มีผลกับ อินสแตนซ์ทั้งหมดของคลาส Model ครับ/ค่ะ
- มักใช้เพื่อจัดการตรรกะทั่วไปของคลาส Model ครับ/ค่ะ
2. โฟลว์แบบไดนามิก (Dynamic Flow)
- ถูกกำหนดค่าโดยผู้ใช้บนอินเทอร์เฟซครับ/ค่ะ
- มีผลเฉพาะกับอินสแตนซ์ที่เจาะจงเท่านั้นครับ/ค่ะ
- มักใช้สำหรับพฤติกรรมที่ปรับแต่งเฉพาะบุคคลในสถานการณ์ที่เจาะจงครับ/ค่ะ
สรุปง่ายๆ คือ: โฟลว์แบบคงที่เป็นเทมเพลตตรรกะที่กำหนดไว้บนคลาส ส่วนโฟลว์แบบไดนามิกเป็นตรรกะที่ปรับแต่งเฉพาะบุคคลซึ่งกำหนดไว้บนอินสแตนซ์ครับ/ค่ะ
กฎการเชื่อมโยงเทียบกับโฟลว์แบบไดนามิก
ในระบบการกำหนดค่าของ FlowEngine มีสองวิธีในการนำตรรกะของเหตุการณ์ไปใช้ครับ/ค่ะ
1. กฎการเชื่อมโยง (Linkage Rules)
- เป็น การห่อหุ้มขั้นตอน (Step) ของโฟลว์เหตุการณ์ที่มาพร้อมระบบ ครับ/ค่ะ
- กำหนดค่าได้ง่ายกว่าและมีความหมายชัดเจนยิ่งขึ้นครับ/ค่ะ
- โดยพื้นฐานแล้วยังคงเป็นรูปแบบที่เรียบง่ายของ โฟลว์เหตุการณ์ (Flow) ครับ/ค่ะ
2. โฟลว์แบบไดนามิก (Dynamic Flow)
- มีความสามารถในการกำหนดค่าโฟลว์ได้อย่างสมบูรณ์ครับ/ค่ะ
- สามารถปรับแต่งได้:
- ทริกเกอร์ (on): กำหนดว่าจะทริกเกอร์เมื่อใดครับ/ค่ะ
- ขั้นตอนการดำเนินการ (steps): กำหนดตรรกะที่จะดำเนินการครับ/ค่ะ
- เหมาะสำหรับตรรกะทางธุรกิจที่ซับซ้อนและยืดหยุ่นมากขึ้นครับ/ค่ะ
ดังนั้น กฎการเชื่อมโยง ≈ โฟลว์เหตุการณ์แบบง่าย กลไกหลักของทั้งสองอย่างจึงสอดคล้องกันครับ/ค่ะ
ความสอดคล้องของ FlowAction
ไม่ว่าจะเป็น กฎการเชื่อมโยง หรือ โฟลว์เหตุการณ์ ควรใช้ชุด FlowAction เดียวกันครับ/ค่ะ กล่าวคือ:
- FlowAction กำหนดการดำเนินการที่สามารถเรียกใช้โดย Flow ได้ครับ/ค่ะ
- ทั้งสองใช้ระบบการดำเนินการชุดเดียวกัน ไม่ใช่การนำไปใช้แยกกันสองชุดครับ/ค่ะ
- ซึ่งจะช่วยให้มั่นใจได้ถึงการนำตรรกะกลับมาใช้ใหม่และการขยายที่สอดคล้องกันครับ/ค่ะ
ลำดับชั้นของแนวคิด
ในเชิงแนวคิด ความสัมพันธ์เชิงนามธรรมหลักของ FlowModel มีดังนี้ครับ/ค่ะ
FlowModel
└── FlowDefinition
├── FlowEventDefinition
│ ├── เหตุการณ์ส่วนกลาง (Global Events)
│ └── เหตุการณ์เฉพาะส่วน (Local Events)
└── FlowActionDefinition
├── การดำเนินการส่วนกลาง (Global Actions)
└── การดำเนินการเฉพาะส่วน (Local Actions)
คำอธิบายลำดับชั้น
-
FlowModel
หมายถึงเอนทิตีโมเดลที่มีตรรกะโฟลว์ที่สามารถกำหนดค่าและดำเนินการได้ครับ/ค่ะ
-
FlowDefinition
กำหนดชุดตรรกะโฟลว์ที่สมบูรณ์ (รวมถึงเงื่อนไขการทริกเกอร์และขั้นตอนการดำเนินการ) ครับ/ค่ะ
-
FlowEventDefinition
กำหนดแหล่งที่มาของการทริกเกอร์ของโฟลว์ ซึ่งรวมถึง:
- เหตุการณ์ส่วนกลาง (Global events): เช่น การเริ่มต้นแอปพลิเคชัน การโหลดข้อมูลเสร็จสมบูรณ์ครับ/ค่ะ
- เหตุการณ์เฉพาะส่วน (Local events): เช่น การเปลี่ยนแปลงฟิลด์ การคลิกปุ่มครับ/ค่ะ
-
FlowActionDefinition
กำหนดการดำเนินการที่โฟลว์สามารถทำได้ ซึ่งรวมถึง:
- การดำเนินการส่วนกลาง (Global actions): เช่น การรีเฟรชหน้า การแจ้งเตือนส่วนกลางครับ/ค่ะ
- การดำเนินการเฉพาะส่วน (Local actions): เช่น การแก้ไขค่าฟิลด์ การสลับสถานะคอมโพเนนต์ครับ/ค่ะ
สรุป
| แนวคิด | วัตถุประสงค์ | ขอบเขตการใช้งาน |
|---|
| โฟลว์แบบคงที่ (Static Flow) | ตรรกะโฟลว์ที่กำหนดในโค้ด | อินสแตนซ์ทั้งหมดของ XXModel |
| โฟลว์แบบไดนามิก (Dynamic Flow) | ตรรกะโฟลว์ที่กำหนดบนอินเทอร์เฟซ | อินสแตนซ์ FlowModel เดียว |
| FlowEvent | กำหนดทริกเกอร์ (ว่าจะทริกเกอร์เมื่อใด) | ส่วนกลางหรือเฉพาะส่วน |
| FlowAction | กำหนดตรรกะการดำเนินการ | ส่วนกลางหรือเฉพาะส่วน |
| กฎการเชื่อมโยง (Linkage Rule) | การห่อหุ้มขั้นตอนของโฟลว์เหตุการณ์แบบง่าย | ระดับบล็อก, ระดับการดำเนินการ |