ในการออกแบบซอฟต์แวร์หรือการสร้างเงื่อนไขทางธุรกิจ (Business Rules) บ่อยครั้งที่เราต้องเจอกับเงื่อนไขที่ซ้อนกันหลายชั้นจนเริ่มงง การใช้ Decision Table (ตารางการตัดสินใจ) จึงเป็นเทคนิคที่ช่วยเปลี่ยน Logic ที่ยุ่งเหยิงให้กลายเป็นตารางที่อ่านง่าย ครบถ้วน และลดความผิดพลาดได้ดีเยี่ยมครับ
Decision Table คืออะไร ?
Decision Table คือเครื่องมือในรูปแบบตารางที่ใช้แสดงความสัมพันธ์ระหว่าง “เงื่อนไข” และ “ผลลัพธ์ / การกระทำ” โดยจะแจกแจงทุกความเป็นไปได้ออกมาเป็นกรณี ๆ ไป เพื่อให้มั่นใจว่าเราไม่ได้ตกหล่นสถานการณ์ใดสถานการณ์หนึ่งไป
ส่วนประกอบหลักของตาราง
- Condition Stub: รายการเงื่อนไขที่เราต้องพิจารณา
- Action Stub: รายการผลลัพธ์หรือสิ่งที่ต้องทำ
- Condition Entry : ค่าของเงื่อนไขในแต่ละกรณี
- Action Entry: ตัวบอกว่าใน Rule นั้น ๆ จะเกิด Action ใดขึ้น
ขั้นตอนการสร้าง Decision Table
สมมติเราต้องการทำระบบ “คำนวณส่วนลดร้านอาหาร” โดยมีเงื่อนไขคือ
- ถ้าเป็นสมาชิก และ ยอดเกิน 500 บาท -> ลด 15%
- ถ้าเป็นสมาชิก แต่ ยอดไม่ถึง 500 บาท -> ลด 5%
- ถ้าไม่เป็นสมาชิก แต่ ยอดเกิน 500 บาท -> ลด 5%
- นอกเหนือจากนี้ -> ไม่ลดเลย
การทำงาน
- ระบุเงื่อนไขและผลลัพธ์
- Conditions:
- เป็นสมาชิก ?
- ยอด > 500 ?
- Actions:
- ลด 15%
- ลด 5%
- ราคาปกติ
- Conditions:
- คำนวณจำนวน Rule
เนื่องจากมี 2 เงื่อนไข ดังนั้นจะมีทั้งหมด 22 = 4 กรณีConditions Rule 1 Rule 2 Rule 3 Rule 4 เป็นสมาชิก ? Y Y N N ยอดซื้อ > 500 ? Y N Y N Actions ส่วนลด 15% X ส่วนลด 5% X X ราคาปกติ X - การอ่าน Decision Table ให้เข้าใจง่ายที่สุด คือการมองว่ามันคือ “แผนที่นำทาง” ที่เชื่อมโยงระหว่าง “เหตุ” และ “ผล” ครับ โดยเราจะอ่านไล่จาก บนลงล่าง และ ซ้ายไปขวา ตามลำดับ ดังนี้ครับ
- การอ่านแนวตั้ง
หัวใจสำคัญของตารางนี้คือ Rule ซึ่งมักจะอยู่ตามแนวคอลัมน์ ให้คุณเลือกอ่านทีละคอลัมน์เพื่อดูว่า “ถ้าเกิดเหตุการณ์แบบนี้ ผลลัพธ์จะเป็นอย่างไร”- ส่วนบน : อ่านจากบนลงล่างเพื่อดูว่าเงื่อนไขใน Rule นั้น ๆ เป็นอย่างไร
- ส่วนล่าง : เมื่อเงื่อนไขด้านบนครบถ้วน ให้มองลงมาด้านล่างที่มีเครื่องหมาย X หรือ Checkmark นั่นคือสิ่งที่จะเกิดขึ้น
- ตัวอย่าง: ใน Rule 1 ถ้า “เป็นสมาชิก = ใช่” และ “ยอดซื้อ > 500 = ใช่” ผลลัพธ์ที่ได้คือ “ส่วนลด 15%”
- การอ่านแนวนอน
การอ่านตามแถว จะช่วยให้เราเห็นภาพรวมของระบบว่ามีตัวแปรอะไรบ้างที่ส่งผลต่อการตัดสินใจ- แถวของ Condition: ช่วยให้เห็นว่าแต่ละเงื่อนไขมีความถี่หรือความสำคัญอย่างไร
- แถวของ Action: ช่วยให้เห็นว่าผลลัพธ์หนึ่ง ๆ เกิดขึ้นได้จากกี่กรณีบ้าง
- เทคนิคการไล่ลำดับสำหรับมือใหม่
หากคุณได้รับตารางมาแล้วต้องวิเคราะห์ ให้ใช้หลักการ “ถ้า… แล้ว…” (If… Then…) ดังนี้- สแกนหา Rule: เลือกมา 1 คอลัมน์
- ตั้งประโยค If: “ถ้า และ และ …”
- สรุปด้วย Then: “…แล้ว (Action ที่มีเครื่องหมาย X) จะถูกดำเนินการ”
- การอ่านแนวตั้ง
ทำไมเราถึงควรใช้ Decision Table ?
- ป้องกันความสับสน: เมื่อเงื่อนไขเยอะเกินกว่าที่
If-Elseในหัวจะรับไหว ตารางจะช่วยจัดระเบียบความคิดได้ดีมาก - ตรวจสอบความครบถ้วน : ช่วยให้เห็นว่าเราลืมเขียนโปรแกรมดักกรณีไหนไปหรือเปล่า
- สื่อสารง่าย: ใช้คุยกับทีม Business หรือลูกค้าได้เข้าใจตรงกันโดยไม่ต้องเปิด Code ให้ดู
- ลด Logic ที่ซ้ำซ้อน: บางครั้งเราจะเห็นว่าหลาย Rule ให้ผลลัพธ์เหมือนกัน ทำให้เรายุบรวมเงื่อนไข ได้
ข้อควรระวัง
หากเงื่อนไขมีจำนวนมากเกินไป ตารางจะขยายใหญ่ขึ้นมหาศาล ในกรณีนี้ควรแยกตารางออกเป็นตารางย่อย ๆ ตามโมดูลแทนครับ
อ่านเพิ่มเติม