PlusMagi's Blog By Pitt Phunsanit Backend,Database การเขียน Use Case Specification: เทคนิคการรับมือ Alternate Flow และ Exception Flow เมื่อเกิดปัญหา

การเขียน Use Case Specification: เทคนิคการรับมือ Alternate Flow และ Exception Flow เมื่อเกิดปัญหา

“>

ในฐานะ Senior Architect การออกแบบระบบองค์กร (Enterprise System) ไม่ได้จบลงที่การทำให้ฟังก์ชันหลักทำงานได้ (Happy Path) แต่ความท้าทายที่แท้จริงคือการสร้างความทนทาน (Resilience) ให้ระบบสามารถรับมือกับทุกสถานการณ์ที่ผิดปกติ การเขียน Use Case Specification ที่สมบูรณ์จึงต้องครอบคลุมทั้ง Alternate Flow และ Exception Flow อย่างละเอียด

“>

การวิเคราะห์ Flow ในมุมมองของ System Architect

“>

การวิเคราะห์ข้อกำหนด (Requirements Analysis) ต้องแยกแยะกระบวนการออกเป็น 3 มิติหลัก ซึ่งแต่ละมิติมีผลต่อการออกแบบ Logic ในระดับฐานข้อมูล:

“>
  • Primary Flow (Happy Path): เส้นทางที่ระบบทำงานได้สำเร็จตามปกติ (เช่น การบันทึกคำสั่งซื้อที่สมบูรณ์)
  • Alternate Flow: เส้นทางสำรองที่เกิดจากการตัดสินใจหรือเงื่อนไขที่ถูกเปิดใช้งาน (เช่น ผู้ใช้มีส่วนลดพิเศษ หรือสินค้ามีสต็อกหลายประเภท)
  • Exception Flow: สถานการณ์ผิดพลาดที่ต้องจัดการอย่างเป็นระบบ เช่น ข้อมูลไม่ครบถ้วน, ข้อมูลขัดแย้งกัน (Data Integrity Violation), หรือสิทธิ์การเข้าถึงไม่เพียงพอ ซึ่งเป็นจุดที่ต้องใช้ Transactional Control สูงสุด
“>

การจำลอง Flow Control ด้วย PostgreSQL

“>

แม้ว่า Use Case จะเป็นเรื่องของ Business Logic แต่การบังคับใช้กฎเกณฑ์ (Constraints) และการควบคุมการทำงาน (Flow Control) ต้องเกิดขึ้นในระดับฐานข้อมูลด้วย PostgreSQL เราสามารถใช้คุณสมบัติ Transaction และคำสั่งควบคุม Flow เช่น CASE statement เพื่อจำลองการทำงานของ Alternate และ Exception Flow ได้อย่างมีประสิทธิภาพ

“>

พิจารณาสถานการณ์การประมวลผลคำสั่งซื้อที่ต้องตรวจสอบทั้งความถูกต้องของข้อมูล (Exception) และการใช้ส่วนลดพิเศษ (Alternate) ก่อนทำการอัปเดต:

“>

SQL

-- 1. กำหนด Transaction เพื่อให้มั่นใจว่าการเปลี่ยนแปลงทั้งหมดเป็น Atomic<br>BEGIN;<br><br>-- 2. ตรวจสอบเงื่อนไข Exception Flow: ตรวจสอบว่ารหัสสินค้ามีอยู่จริงหรือไม่<br>SELECT * FROM products WHERE product_id = 'P101';<br><br>-- 3. ตรวจสอบเงื่อนไข Alternate Flow: ตรวจสอบสิทธิ์ส่วนลดพิเศษ<br>SELECT CASE<br>    WHEN user_role = 'VIP' AND order_total > 500 THEN 0.10 -- ส่วนลด 10%<br>    WHEN user_role = 'STUDENT' THEN 0.05 -- ส่วนลด 5%<br>    ELSE 0.00 -- ไม่มีส่วนลด<br>END AS discount_rate<br>FROM users WHERE user_id = 100;<br><br>-- 4. การดำเนินการหลัก: อัปเดตสถานะคำสั่งซื้อและคำนวณยอดสุดท้าย<br>UPDATE orders SET total_amount = total_amount * (1 - (SELECT discount_rate FROM (SELECT CASE WHEN user_role = 'VIP' AND order_total > 500 THEN 0.10 WHEN user_role = 'STUDENT' THEN 0.05 ELSE 0.00 END AS discount_rate FROM users WHERE user_id = 100)) WHERE order_id = 500;<br><br>-- 5. หากทุกอย่างสำเร็จ (Primary Flow) ให้ Commit<br>COMMIT;<br>-- หากเกิดข้อผิดพลาดใดๆ (Exception Flow) ระบบจะ Rollback โดยอัตโนมัติ<br>-- ROLLBACK;<br>
“>

การใช้ BEGIN...COMMIT ทำให้เราสามารถควบคุมให้การเปลี่ยนแปลงข้อมูลทั้งหมดเป็นไปอย่างสมบูรณ์ หากมีขั้นตอนใดล้มเหลว (เช่น การอัปเดตข้อมูลสินค้าล้มเหลว) ระบบจะย้อนกลับ (Rollback) ไปยังสถานะเดิมโดยอัตโนมัติ นี่คือการจัดการ Exception Flow ที่สมบูรณ์ที่สุดในระดับฐานข้อมูล

“>

บทสรุป: การออกแบบที่ครอบคลุม

“>

ในฐานะ System Architect การเขียน Use Case Specification ที่ดีจึงไม่ใช่แค่การเขียนขั้นตอน แต่คือการกำหนดขอบเขตของความล้มเหลว (Failure Boundaries) ด้วย เมื่อเราใช้ PostgreSQL ในการจัดการ Flow เราต้องใช้ Transaction เพื่อให้มั่นใจว่าทุกการตัดสินใจ (Alternate Flow) และทุกการตรวจสอบความถูกต้อง (Exception Flow) ถูกรวมเข้าเป็นหน่วยงานที่สมบูรณ์ (Atomic Unit) เสมอ การทำเช่นนี้จะช่วยให้ระบบของเรามีความน่าเชื่อถือสูงและพร้อมรับมือกับความซับซ้อนของโลกธุรกิจจริง

Exit mobile version