ในโลกของการพัฒนาซอฟต์แวร์ขนาดใหญ่ การเขียนโค้ดที่ไม่มีการจัดระเบียบที่ดีมักเผชิญกับปัญหาที่เรียกว่า Global Scope Pollution หรือการปนเปื้อนของขอบเขตสโคปทั่วทั้งโปรแกรม เมื่อไฟล์โค้ดมีจำนวนเพิ่มขึ้น ตัวแปรหรือฟังก์ชันที่เราสร้างอาจไปทับ (overwrite) สิ่งที่มีอยู่แล้ว ทำให้เกิดบั๊กที่ยากต่อการค้นหาและบำรุงรักษา
Module จึงถูกออกแบบมาเพื่อแก้ไขจุดอ่อนนี้ โดยหลักการคือมันทำหน้าที่เป็นกล่องบรรจุภัณฑ์อิสระสำหรับชุดความสามารถบางอย่าง โมดูลช่วยให้คุณแยกส่วนงานต่างๆ ออกจากกันได้อย่างชัดเจน (Encapsulation) แต่ยังคงอนุญาตให้แต่ละส่วนทำงานร่วมกันได้ผ่านระบบนำเข้าและการส่งออกข้อมูลเท่านั้น
แนวคิดหลักของ Module ในเชิงสถาปัตยกรรม
ในบริบทของระบบฐานข้อมูลขนาดใหญ่ การทำความเข้าใจแนวคิดของ Module คือการเข้าใจหลักการของการแยกส่วนงาน (Separation of Concerns) ไม่ว่าจะเป็นการใช้ Schema, Stored Procedures, หรือ Functions เพื่อให้แน่ใจว่าตรรกะทางธุรกิจแต่ละส่วนทำงานอย่างเป็นอิสระและไม่กระทบต่อส่วนอื่น
การจำลอง Module ด้วย PostgreSQL Functions
แทนที่จะใช้ระบบ `import`/`export` ของ TypeScript โดยตรง เราจะใช้หลักการของ Module ในการจัดการตรรกะทางธุรกิจที่ซับซ้อนใน PostgreSQL โดยการสร้างฟังก์ชัน (Function) ซึ่งทำหน้าที่เป็น ‘โมดูล’ ที่รับผิดชอบงานเฉพาะอย่างเท่านั้น ตัวอย่างเช่น การคำนวณยอดรวมสินค้าที่ผ่านการกรองข้อมูลบางอย่าง
สมมติว่าเรามีตาราง `orders` และเราต้องการโมดูลที่รับผิดชอบการคำนวณสถานะคำสั่งซื้อที่สมบูรณ์เท่านั้น:
SQL
-- 1. สร้างฟังก์ชัน (Module) สำหรับคำนวณสถานะคำสั่งซื้อที่สมบูรณ์
CREATE OR REPLACE FUNCTION calculate_completion_status(order_id INT) RETURNS TEXT AS $$
BEGIN
-- ตรรกะภายในโมดูลนี้จะรับผิดชอบเฉพาะการตรวจสอบสถานะ
IF EXISTS (SELECT 1 FROM orders WHERE id = order_id AND status = 'Completed') THEN
RETURN 'Completed';
ELSIF EXISTS (SELECT 1 FROM orders WHERE id = order_id AND status = 'Processing') THEN
RETURN 'Processing';
ELSE
RETURN 'Pending';
END IF;
END;$$ LANGUAGE plpgsql;
-- 2. การเรียกใช้ Module จากส่วนอื่นของระบบ
SELECT calculate_completion_status(101);
การใช้ฟังก์ชันนี้ทำให้เราสามารถเรียกใช้ตรรกะการตรวจสอบสถานะได้อย่างเป็นระบบ โดยไม่จำเป็นต้องเขียนโค้ดตรวจสอบสถานะซ้ำๆ ในทุกส่วนของแอปพลิเคชัน (ลด Global Scope Pollution ของโค้ดแอปพลิเคชัน)
ข้อดีของการออกแบบแบบ Module
1. ความสามารถในการนำกลับมาใช้ใหม่ (Reusability): สามารถเรียกใช้ฟังก์ชันเดียวกันได้จากหลายๆ ส่วนของระบบโดยไม่ต้องเขียนซ้ำ
2. การบำรุงรักษา (Maintainability): หากต้องการแก้ไขตรรกะการคำนวณสถานะ เราแก้ไขที่ฟังก์ชันเดียวเท่านั้น
3. ความชัดเจน (Clarity): แต่ละโมดูลมีขอบเขตความรับผิดชอบที่ชัดเจน ทำให้โค้ดอ่านง่ายและเข้าใจได้ง่ายขึ้นมาก
บทสรุป
ไม่ว่าจะเป็นการใช้ TypeScript Modules ในภาษาโปรแกรม หรือการใช้ PostgreSQL Functions/Schema ในฐานข้อมูล แนวคิดหลักของ Module คือการจัดระเบียบและการห่อหุ้มตรรกะที่เกี่ยวข้องไว้ด้วยกันอย่างเป็นอิสระ การทำความเข้าใจหลักการนี้จะช่วยให้สถาปนิกและนักพัฒนาสามารถสร้างระบบที่ขยายตัวได้ (Scalable) มีความเสถียร และง่ายต่อการดูแลรักษาในระยะยาว