PlusMagi's Blog By Pitt Phunsanit Backend,Database Java Interfaces: การสร้าง Interface, การทำ Multiple Inheritance และการใช้ Default/Static Methods

Java Interfaces: การสร้าง Interface, การทำ Multiple Inheritance และการใช้ Default/Static Methods

ในฐานะ Senior Architect การออกแบบระบบฐานข้อมูลที่แข็งแกร่งและสามารถขยายได้ (Scalable and Extensible) เป็นหัวใจสำคัญของการพัฒนาซอฟต์แวร์เชิงสถาปัตยกรรม (Architectural Software Development) แนวคิดหลักที่เราต้องยึดถือคือการแยก &#201Cnิยามข้อกำหนด&#201C (What it must do) ออกจาก &#201Cการนำไปใช้งานจริง&#201C (How it does it) เพื่อให้ฐานข้อมูลของเรามีความยืดหยุ่นสูง ไม่ผูกติดกับรายละเอียดของตาราง (Table) ใดตารางหนึ่งมากเกินไป

ในบริบทของ PostgreSQL เราใช้แนวคิดของ &#201cContract&#201c (สัญญา) ซึ่งไม่ได้อยู่ในรูปแบบของ Interface อย่างภาษาโปรแกรม แต่ถูกจำลองผ่านการใช้ &#201cViews&#201c, &#201cFunctions&#201c, และ &#201cConstraints&#201c เพื่อกำหนดชุดของพฤติกรรมที่ข้อมูลต้องปฏิบัติตามโดยอัตโนมัติ

→ การจำลอง Interface Contract ใน PostgreSQL

Interface ในภาษา OOP คือสัญญาที่กำหนดว่าคลาสใดๆ ต้องมีเมธอดชุดใดบ้าง ใน PostgreSQL เราจำลองสิ่งนี้โดยการสร้าง View หรือ Schema ที่กำหนดโครงสร้างข้อมูลที่จำเป็น (Required Columns) และใช้ Function เพื่อกำหนดชุดของการดำเนินการที่ต้องเกิดขึ้นเสมอ (Required Operations) ซึ่งทำหน้าที่คล้ายกับ Abstract Methods

→ การกำหนดพฤติกรรมเริ่มต้น (Default/Static Behavior)

การพัฒนาที่สำคัญคือการเพิ่มพฤติกรรมเริ่มต้น (Default Behavior) ซึ่งใน Java คือ Default Methods ใน PostgreSQL เราใช้ DEFAULT Constraints สำหรับค่าเริ่มต้นของคอลัมน์ และใช้ Stored Functions เพื่อให้โค้ดทำงานแบบอัตโนมัติเมื่อมีการเรียกใช้ (Static Behavior) ทำให้เราสามารถกำหนดกฎทางธุรกิจที่ซับซ้อนได้โดยไม่ต้องเขียนโค้ดในแอปพลิเคชันภายนอก

SQL

-- 1. สร้างตารางหลัก (The Core Data) --
CREATE TABLE products (
    product_id INT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    price NUMERIC(10, 2) NOT NULL,
    stock_count INT
);

-- 2. การกำหนด Default Constraint (Default Method Simulation) --
-- กำหนดให้สินค้าที่เพิ่มเข้ามาใหม่ มีสถานะ 'Active' โดยอัตโนมัติ
ALTER TABLE products ADD COLUMN status VARCHAR(20) DEFAULT 'Active';

-- 3. การสร้าง Function สำหรับคำนวณพฤติกรรม (Static Behavior Simulation) --
-- ฟังก์ชันนี้จะคำนวณราคาสุทธิรวมภาษี (Default Logic)
CREATE OR REPLACE FUNCTION calculate_final_price(p_id INT) RETURNS NUMERIC AS $$
BEGIN
    RETURN (SELECT price FROM products WHERE product_id = p_id) * 1.07;
END;$$
LANGUAGE plpgsql;

→ การจำลอง Multiple Inheritance (Composition & Views)

เนื่องจาก PostgreSQL ไม่มีกลไกการสืบทอดแบบคลาสโดยตรง (Class Inheritance) การจำลอง Multiple Inheritance ของพฤติกรรม (Behavioral Multiple Inheritance) จึงทำได้โดยการใช้ Composition และ Views เราจะรวมข้อมูลและพฤติกรรมจากหลายแหล่งเข้าด้วยกันเพื่อสร้าง ‘สัญญา’ ที่สมบูรณ์

SQL

-- สมมติว่ามีตาราง 'inventory' และ 'supplier' เพิ่มเติม
CREATE TABLE inventory (product_id INT PRIMARY KEY, quantity INT);
CREATE TABLE supplier (product_id INT PRIMARY KEY, supplier_name VARCHAR(100));

-- สร้าง View ที่รวม Contract ทั้งหมด (Product + Inventory + Supplier)
CREATE VIEW product_details_view AS
SELECT
    p.product_id,
    p.name,
    p.status,
    p.price,
    i.quantity,
    s.supplier_name
FROM
    products p
JOIN
    inventory i ON p.product_id = i.product_id
JOIN
    supplier s ON p.product_id = s.product_id;

→ บทสรุปทางสถาปัตยกรรม

การใช้ Views, Functions, และ Constraints ใน PostgreSQL ช่วยให้เราสามารถสร้างชั้นของ Contract และพฤติกรรมที่ซับซ้อนได้เทียบเท่ากับการทำ Multiple Inheritance ในภาษา OOP แนวทางนี้ทำให้โค้ดของเรามีความเป็น Module สูง (High Modularity) และง่ายต่อการบำรุงรักษา (Maintainability) เพราะเราได้แยกกฎทางธุรกิจ (Business Rules) ออกจากโค้ดแอปพลิเคชันหลักอย่างสมบูรณ์ ทำให้ระบบมีความยืดหยุ่นในการขยายตัวในอนาคตได้อย่างแท้จริง