PlusMagi's Blog By Pitt Phunsanit Backend,Database C#: Multiple Document Interface (MDI )

C#: Multiple Document Interface (MDI )

ในโลกของการพัฒนาแอปพลิเคชันแบบ Desktop, การจัดการหน้าจอที่ซับซ้อนและมีหลายฟอร์มย่อยทำงานร่วมกันในหน้าต่างหลักเป็นสิ่งที่พบได้บ่อย รูปแบบการออกแบบที่เรียกว่า Multiple Document Interface (MDI) คือรูปแบบที่ช่วยให้ผู้ใช้สามารถทำงานกับเอกสารหรือฟอร์มย่อยหลายชุดพร้อมกันได้โดยไม่จำเป็นต้องสลับหน้าต่างไปมา

ในมุมมองของ System Architect, MDI เป็นเพียงส่วนของ User Interface (UI) ที่กำหนดประสบการณ์ผู้ใช้ (UX) แต่หัวใจสำคัญที่ทำให้ระบบนี้ทำงานได้อย่างเสถียรและสามารถจัดการสถานะ (State) ของเอกสารย่อยแต่ละชุดได้อย่างอิสระ คือระบบจัดการข้อมูล (Data Layer) ที่อยู่เบื้องหลัง ซึ่งในบทความนี้เราจะมาดูกลไกการจัดการข้อมูลที่รองรับ MDI โดยใช้ความสามารถของ PostgreSQL ซึ่งเป็นฐานข้อมูลเชิงสัมพันธ์ที่ทรงพลัง

หลักการทำงานของ MDI และบทบาทของ PostgreSQL

เมื่อระบบ MDI ถูกเรียกใช้งาน ฟอร์มย่อยแต่ละฟอร์ม (Document) จะต้องมีสถานะข้อมูล (State) และรอบการทำงาน (Session) ที่เป็นอิสระต่อกัน การที่ฟอร์มย่อย A ถูกแก้ไขข้อมูล จะต้องไม่กระทบต่อข้อมูลที่กำลังเปิดอยู่ในฟอร์มย่อย B ดังนั้น ฐานข้อมูลจึงต้องถูกออกแบบมาเพื่อรองรับการแยกสถานะข้อมูลเหล่านี้อย่างชัดเจน

PostgreSQL สามารถเข้ามาช่วยในส่วนนี้ได้โดยการใช้เทคนิคการจัดการ Session ID หรือการใช้ Schema แยกสำหรับแต่ละเอกสารย่อย ทำให้เราสามารถจำลองการทำงานของ ‘เอกสารหลายชุด’ ได้อย่างมีประสิทธิภาพ ตัวอย่างเช่น หากเรามีเอกสาร 3 ชุด (Document A, B, C) ที่มีข้อมูลที่เกี่ยวข้องกับลูกค้า, สินค้า, และคำสั่งซื้อ เราสามารถใช้ PostgreSQL เพื่อจัดการข้อมูลเหล่านี้แยกกันโดยใช้ Transaction หรือ Partitioning

ตัวอย่างการจัดการข้อมูลหลายเอกสารด้วย PostgreSQL

สมมติว่าเราต้องการบันทึกข้อมูลของ 3 เอกสารย่อย (เช่น ข้อมูลลูกค้า, ข้อมูลสินค้า, และข้อมูลธุรกรรม) ในระบบ MDI เราสามารถใช้ฟังก์ชันที่จัดการข้อมูลเหล่านี้แยกกันได้:

SQL

-- 1. สร้างตารางหลักสำหรับเก็บสถานะของเอกสารย่อย (Document State) และผูกกับ Session ID
CREATE TABLE document_session_state (
    session_id VARCHAR(50) PRIMARY KEY,
    document_type VARCHAR(50) NOT NULL,
    last_modified TIMESTAMP DEFAULT NOW()
);

-- 2. บันทึกสถานะเริ่มต้นของ 3 เอกสารย่อย (A, B, C)
INSERT INTO document_session_state (session_id, document_type) VALUES
('session_123', 'CustomerProfile'),
('session_123', 'ProductInventory'),
('session_123', 'OrderTransaction');

-- 3. อัปเดตข้อมูลเฉพาะเอกสารที่ถูกแก้ไข (เช่น ProductInventory) โดยใช้ข้อมูลที่แยกกัน
UPDATE document_session_state
SET last_modified = NOW()
WHERE session_id = 'session_123' AND document_type = 'ProductInventory';

-- 4. ดึงข้อมูลที่เกี่ยวข้องกับเอกสารย่อยที่กำลังเปิดอยู่ทั้งหมด
SELECT 
    session_id, 
    document_type, 
    last_modified
FROM document_session_state
WHERE session_id = 'session_123';

จากโค้ดข้างต้น เราเห็นว่า PostgreSQL ทำหน้าที่เป็น Single Source of Truth ที่สามารถติดตามสถานะของ ‘หลายเอกสาร’ ภายใต้ Session เดียวกันได้อย่างแม่นยำ ทำให้แอปพลิเคชัน MDI ที่สร้างด้วย C# สามารถแสดงผลข้อมูลที่ถูกต้องและเป็นปัจจุบันสำหรับทุกฟอร์มย่อยได้

บทสรุป

การสร้างระบบ MDI ที่สมบูรณ์แบบต้องอาศัยการทำงานร่วมกันระหว่าง Frontend (C# GUI) และ Backend (PostgreSQL Data Layer) ในฐานะ Senior Architect เราต้องเข้าใจว่า MDI เป็นเพียงภาพลักษณ์ภายนอก แต่ความสำเร็จของระบบขึ้นอยู่กับความสามารถของฐานข้อมูลในการจัดการสถานะข้อมูล (State Management) ที่ซับซ้อนและเป็นอิสระ การใช้ PostgreSQL ในการจัดการ Session และ Document State อย่างเป็นระบบ จึงเป็นกุญแจสำคัญที่ทำให้แอปพลิเคชันขนาดใหญ่นี้มีความเสถียรและขยายตัวได้ในอนาคต

Exit mobile version