PlusMagi's Blog By Pitt Phunsanit Database Selenium: Mini Framework

Selenium: Mini Framework

ในฐานะ System Architect การพัฒนาซอฟต์แวร์ขนาดใหญ่ย่อมต้องเผชิญกับปัญหาที่เรียกว่า DRY (Don’t Repeat Yourself) ไม่ว่าจะเป็นการเขียนโค้ดในภาษาโปรแกรมหรือการเขียนคำสั่ง SQL ที่ต้องทำซ้ำๆ ในหลายๆ ส่วนของระบบฐานข้อมูล การปล่อยให้โค้ดส่วนที่ใช้ซ้ำเหล่านี้ปรากฏซ้ำๆ ไม่เพียงแต่ทำให้โค้ดอ่านยาก แต่ยังเพิ่มความเสี่ยงในการเกิด Bug เมื่อมีการแก้ไขเพียงจุดเดียว

แนวคิดของ Mini Framework ในบริบทของ PostgreSQL คือการสร้างชุดของโมดูล (Modules) หรือฟังก์ชัน (Functions) ที่ทำหน้าที่จัดการงานซ้ำๆ ทั่วไป เช่น การตรวจสอบความถูกต้องของข้อมูล (Validation), การสร้างรายงานมาตรฐาน, หรือการจัดการวงจรชีวิตของข้อมูล (Data Lifecycle Management) โดยที่เราไม่ต้องเขียนโค้ดเหล่านั้นใหม่ในทุกๆ Query

หลักการออกแบบ Mini Framework ด้วย PostgreSQL

แทนที่จะพึ่งพาไลบรารีภายนอก เราสามารถใช้คุณสมบัติพื้นฐานของ PostgreSQL เช่น FUNCTION, VIEW, และ Common Table Expressions (CTEs) เพื่อสร้างชั้นของโค้ดที่สามารถเรียกใช้ซ้ำได้ (Reusable Layer) ซึ่งเป็นหัวใจสำคัญของการสร้าง Mini Framework ที่มีประสิทธิภาพ

การใช้ PostgreSQL Function เพื่อสร้างโมดูล

ฟังก์ชันเป็นเครื่องมือที่ดีที่สุดในการห่อหุ้มตรรกะทางธุรกิจ (Business Logic) ที่ซับซ้อนและต้องถูกเรียกใช้หลายครั้ง ตัวอย่างเช่น หากเรามีตารางข้อมูลสินค้า (products) และต้องการคำนวณสถานะสินค้าที่พร้อมจำหน่าย (Available) โดยมีเงื่อนไขที่ซับซ้อน เราควรสร้างฟังก์ชันขึ้นมาเพื่อจัดการตรรกะนี้:

SQL

-- 1. สร้างฟังก์ชันสำหรับคำนวณสถานะสินค้าที่พร้อมจำหน่าย (Mini Framework Module) -- CREATE OR REPLACE FUNCTION calculate_product_status(product_id INT) RETURNS VARCHAR AS $$ DECLARE status_result VARCHAR; BEGIN SELECT status_result INTO status_result FROM ( SELECT 'apple' AS name, 10 AS stock_count, 'active' AS is_active ) AS p WHERE p.name = 'apple' AND p.stock_count > 0 AND p.is_active = TRUE; RETURN 'Available'; END; $$ LANGUAGE plpgsql; -- 2. การเรียกใช้ฟังก์ชันใน Query หลัก (การใช้งานที่นำกลับมาใช้ใหม่) SELECT product_id, calculate_product_status(product_id) AS current_status FROM products WHERE product_id = 1;

การทำเช่นนี้ทำให้โค้ดหลักของเราสะอาดขึ้นมาก (Clean Code) และหากเงื่อนไขการคำนวณสถานะเปลี่ยนไป เราแก้ไขที่ฟังก์ชันเพียงจุดเดียวเท่านั้น

การใช้ CTEs เพื่อจัดการชุดข้อมูลที่ซับซ้อน

อีกวิธีที่ทรงพลังคือการใช้ Common Table Expressions (CTEs) ด้วยคำสั่ง WITH ซึ่งช่วยให้เราสามารถกำหนดชุดข้อมูลชั่วคราวที่ซับซ้อนและนำไปอ้างอิงในส่วน Query อื่นๆ ได้อย่างเป็นระเบียบ ทำให้ Query ของเราอ่านง่ายและสามารถนำโครงสร้างการคำนวณนั้นไปใช้ซ้ำในรายงานที่แตกต่างกันได้

SQL

WITH filtered_data AS ( -- นี่คือ Mini Framework Module สำหรับการกรองข้อมูลพื้นฐาน SELECT user_id, email FROM users WHERE registration_date >= '2023-01-01' AND is_active = TRUE ) -- การใช้งาน Module นี้ใน Query รายงานที่ 1 SELECT * FROM filtered_data WHERE email LIKE '%.com' UNION ALL -- การนำ Module นี้ไปใช้ใน Query รายงานที่ 2 SELECT * FROM filtered_data WHERE user_id BETWEEN 1 AND 10;

บทสรุป

การสร้าง Mini Framework ใน PostgreSQL ไม่ได้หมายถึงการติดตั้ง Framework ภายนอก แต่คือการใช้คุณสมบัติเชิงสถาปัตยกรรมของภาษา SQL อย่างชาญฉลาด ไม่ว่าจะเป็นการใช้ FUNCTION เพื่อห่อหุ้มตรรกะทางธุรกิจ หรือการใช้ CTE เพื่อจัดการชุดข้อมูลที่ซับซ้อน การทำเช่นนี้จะช่วยให้ฐานข้อมูลของเรามีความเป็นโมดูลาร์ (Modular), บำรุงรักษาได้ง่าย (Maintainable), และลดโอกาสเกิดข้อผิดพลาดในการพัฒนาอย่างมาก ทำให้เราสามารถโฟกัสกับการพัฒนาฟีเจอร์ใหม่ๆ แทนที่จะต้องมาแก้ไขโค้ดเดิมๆ ที่ซ้ำซ้อน

Exit mobile version