PlusMagi's Blog By Pitt Phunsanit Backend,Database Razor Components & Lifecycle Methods (โครงสร้างคอมโพเนนต์ วงจรชีวิต OnInitialized และ OnParametersSet)

Razor Components & Lifecycle Methods (โครงสร้างคอมโพเนนต์ วงจรชีวิต OnInitialized และ OnParametersSet)

ในฐานะ Senior Architect การออกแบบระบบที่เสถียรและคาดการณ์ได้นั้น หัวใจสำคัญไม่ได้อยู่ที่การเขียนโค้ดให้ทำงานได้ แต่อยู่ที่การเข้าใจว่าโค้ดส่วนใดจะถูกเรียกใช้เมื่อไหร่ (Execution Context) ไม่ว่าจะเป็นการพัฒนา User Interface หรือการจัดการฐานข้อมูล การทำความเข้าใจ ‘วงจรชีวิต’ (Lifecycle) ขององค์ประกอบย่อยจึงเป็นสิ่งสำคัญอย่างยิ่ง

ในโลกของ PostgreSQL การจัดการสถานะของข้อมูล (Data State Management) ที่ซับซ้อนนั้น จำเป็นต้องมีการกำหนดจุดที่ระบบต้อง ‘ตรวจสอบ’ หรือ ‘ดำเนินการ’ เมื่อข้อมูลถูกสร้างขึ้น (Initial Load) หรือเมื่อข้อมูลที่เกี่ยวข้องมีการเปลี่ยนแปลง (Parameter Update) แนวคิดนี้สามารถเปรียบเทียบได้กับหลักการของ OnInitialized และ OnParametersSet ในการพัฒนา Component-Based Architecture

💡 การทำความเข้าใจวงจรชีวิตข้อมูลใน PostgreSQL

ในบริบทของ PostgreSQL เราจะใช้กลไกที่เรียกว่า Triggers และ Functions เพื่อจำลองการทำงานของวงจรชีวิตเหล่านี้:

1. OnInitialized (การตั้งค่าเริ่มต้น)

OnInitialized คือการดำเนินการที่ต้องเกิดขึ้นเพียงครั้งเดียวเมื่อ Component หรือ Record ถูกสร้างขึ้นมาใหม่ (Initial Creation) ในทางฐานข้อมูล เราจะใช้ BEFORE INSERT Trigger เพื่อให้แน่ใจว่าการตั้งค่าเริ่มต้น (เช่น การกำหนดค่าสถานะเริ่มต้น หรือการคำนวณค่า Hash) ถูกทำขึ้นก่อนที่ข้อมูลจะถูกบันทึกจริง

2. OnParametersSet (การอัปเดตเมื่อพารามิเตอร์เปลี่ยน)

OnParametersSet คือการดำเนินการที่ต้องเกิดขึ้นทุกครั้งที่ข้อมูลที่เกี่ยวข้อง (Parameters) มีการเปลี่ยนแปลง ซึ่งอาจทำให้สถานะของ Record นั้นต้องถูกคำนวณใหม่ เราจะจำลองสิ่งนี้ด้วย BEFORE UPDATE Trigger ซึ่งจะทำงานทุกครั้งที่มีการเรียกใช้คำสั่ง UPDATE ข้อมูลที่เกี่ยวข้อง

⚙️ ตัวอย่างการจำลอง Lifecycle ด้วย PostgreSQL

สมมติว่าเรามีตาราง user_data และต้องการให้มีการคำนวณ status_hash เสมอ:

SQL

-- 1. สร้างตารางหลัก (The Component State) --
CREATE TABLE user_data (
    user_id INT PRIMARY KEY,
    user_name VARCHAR(100),
    source_params VARCHAR(255), -- พารามิเตอร์ที่เปลี่ยนแปลงได้
    status_hash VARCHAR(64)
);

-- 2. ฟังก์ชัน OnInitialized (ทำงานเมื่อ INSERT ครั้งแรก) --
CREATE OR REPLACE FUNCTION initialize_user_status() RETURNS TRIGGER AS $$
BEGIN
    -- คำนวณค่าเริ่มต้นเมื่อมีการสร้าง Record ครั้งแรก
    NEW.status_hash := 'INITIAL-' || MD5(NEW.user_name || ':' || NEW.source_params);
    RETURN NEW;
END;$$
LANGUAGE plpgsql;

-- 3. Trigger สำหรับ OnInitialized (BEFORE INSERT) --
CREATE TRIGGER trg_on_init
BEFORE INSERT ON user_data
FOR EACH ROW
EXECUTE FUNCTION initialize_user_status();

-- 4. ฟังก์ชัน OnParametersSet (ทำงานเมื่อ UPDATE พารามิเตอร์) --
CREATE OR REPLACE FUNCTION update_user_status() RETURNS TRIGGER AS $$
BEGIN
    -- คำนวณค่าใหม่ทุกครั้งที่ source_params เปลี่ยน
    NEW.status_hash := 'UPDATED-' || MD5(NEW.user_name || ':' || NEW.source_params);
    RETURN NEW;
END;$$
LANGUAGE plpgsql;

-- 5. Trigger สำหรับ OnParametersSet (BEFORE UPDATE) --
CREATE TRIGGER trg_on_params_set
BEFORE UPDATE ON user_data
FOR EACH ROW
WHEN (OLD.source_params IS DISTINCT FROM NEW.source_params)
EXECUTE FUNCTION update_user_status();

-- ทดสอบการทำงาน: 
-- 1. OnInitialized (INSERT)
INSERT INTO user_data (user_id, user_name, source_params) VALUES (1, 'Alice', 'apple,banana');

-- 2. OnParametersSet (UPDATE)
UPDATE user_data SET source_params = 'orange,grape' WHERE user_id = 1;

✅ บทสรุป: การจัดการวงจรชีวิตที่สมบูรณ์

การเข้าใจความแตกต่างระหว่างการทำงานครั้งแรก (OnInitialized/INSERT) และการทำงานเมื่อมีการเปลี่ยนแปลงข้อมูล (OnParametersSet/UPDATE) เป็นสิ่งสำคัญอย่างยิ่งในการรักษาความสมบูรณ์ของข้อมูล (Data Integrity) ในระดับ Senior Architect การใช้ Triggers ใน PostgreSQL ทำให้เราสามารถบังคับให้การคำนวณสถานะ (Status Hash) เกิดขึ้นอย่างถูกต้อง ไม่ว่าข้อมูลจะถูกสร้างขึ้นมาครั้งแรก หรือถูกแก้ไขพารามิเตอร์ที่เกี่ยวข้องก็ตาม การจัดการวงจรชีวิตที่แม่นยำเช่นนี้คือรากฐานของระบบที่เชื่อถือได้

Exit mobile version