เวลาเราเจอร้านอาหารอร่อยๆ เคยสังเกตไหมว่าทำไมเขาถึงไม่ให้แม่ครัวเดินไปรับออเดอร์เอง?
เพราะถ้าแม่ครัวต้องวิ่งไปรับออเดอร์ ล้างจาน คิดเงิน เปิดประตูรับลูกค้า… เดี๋ยวก็สต็อกวัตถุดิบพัง เดี๋ยวจานล้างไม่ทัน เดี๋ยวทอดปลาไหม้ โกลาหลไปหมด
ร้านอาหารที่รุ่งจึงแบ่งหน้าที่ชัดเจน พนักงานรับออเดอร์ แม่ครัว ล้างจาน แคชเชียร์ ต่างคนต่างทำ ไม่ก้าวก่ายกัน
หลักการนี้แหละครับ ที่ในวงการพัฒนาซอฟต์แวร์เขาเรียก “Separation of Concerns” (SoC)

🍳 Separation of Concerns คืออะไร?
“แบ่งแยกหน้าที่ให้ชัดเจน แต่ละส่วนรับผิดชอบแค่เรื่องเดียว ไม่ยุ่งกัน”
ตอนเราเขียนโปรแกรม เราอยากให้ส่วนที่คิดเรื่อง “ดึงข้อมูลจากฐานข้อมูล” ไม่ต้องไปสนใจว่า “หน้าตาเว็บจะเป็นสีฟ้าหรือสีเขียว”
และเราอยากให้ส่วนที่จัดการ “Logic ทางธุรกิจ” ไม่ต้องไปรู้ด้วยซ้ำว่าข้อมูลที่ได้มา มาจากฐานข้อมูล MySQL หรือ PostgreSQL หรือแม้แต่ไฟล์ข้อความ
มันคือการจัดบ้านให้เป็นระเบียบ ไม่เอารองเท้าไปเก็บไว้ในตู้เย็น
🧹 แล้วมันดีกับเรายังไง?
- แก้ไขง่าย – อยากเปลี่ยนระบบจ่ายเงินจาก TrueWallet เป็น Rabbit Card? แก้แค่ที่เดียว
- หาบั๊กง่าย – โปรแกรมพัง? รู้ทันทีว่าต้องไปดูส่วนไหน
- ทีมทำงาน parallel ได้ – คนเขียน Frontend ไม่ต้องรอ Backend เสร็จ
- เทสต์ง่าย – ทดสอบระบบจ่ายเงิน โดยไม่ต้องเปิดเว็บก็ได้
- ยืดหยุ่น – พรุ่งนี้เปลี่ยนจาก React เป็น Vue? เอาส่วน UI ออกไปทั้งดุ้น แล้วเอาอันใหม่มาใส่
🧩 ตัวอย่าง Separation of Concerns ที่เห็นกันบ่อยๆ ในชีวิตจริง
1. MVC – ตำราที่เด็กรุ่นใหม่ต้องเคยเจอ
Model (ข้อมูล) – View (หน้าตา) – Controller (ตัวประสาน)
เหมือนร้านอาหาร: - Model = ตำรับอาหาร + วัตถุดิบ (ข้อมูล) - View = จานที่จัดเสิร์ฟ (หน้าตา) - Controller = พนักงานเสิร์ฟ (รับออเดอร์ บอกครัว)
ถ้าไม่มี Separation of Concerns:
แม่ครัวต้องปลูกผักเอง เชือดไก่เอง ล้างจานเอง รับออเดอร์เอง กระบวนการทำงานเป็นไปด้วยความวุ่นวาย ไร้ประสิทธิภาพ
ถ้าเขียนโค้ดแยกกัน:
เปรียบได้กับการแก้สูตรต้มยำกุ้งที ไม่ต้องไปยุ่งกับวิธีการจัดเรียงจาน
2. Backend vs Frontend – สงครามที่คน 90% เคยเข้าใจผิด
สมัยก่อนคนเขียน PHP มักจะเขียน HTML ปนกับ SQL อยู่ในไฟล์เดียวกัน
<?php
$result = mysqli_query("SELECT * FROM users");
echo "<h1>สวัสดี " . $result['name'] . "</h1>";
?>
นี่คือต้นตอของความหายนะ! วันไหนอยากเปลี่ยนจาก Bootstrap เป็น Tailwind? ต้องควานหาคำสั่ง SQL ที่ซ่อนอยู่ใน HTML วันไหนเปลี่ยนชื่อฟิลด์ฐานข้อมูล? ต้องไล่เปลี่ยน HTML ทีละบรรทัด
Separation of Concerns แก้โดย: - Backend: ส่งแค่ JSON - Frontend: ค่อยเอาข้อมูลไปวาง
// Frontend fetch ข้อมูลจาก Backend
fetch('/api/users/1')
.then(res => res.json())
.then(user => {
document.querySelector('h1').textContent = `สวัสดี ${user.name}`;
});
Backend จะเป็น PHP, Python, Go หรืออะไรก็ช่าง Frontend ไม่สน

3. Business Logic แยกจาก Infrastructure
สมมติว่าเราสร้างระบบสมัครสมาชิก ที่ต้องส่งอีเมลต้อนรับ
BAD:
def register_user(email, password):
# ... save to database ...
smtp = smtplib.SMTP('smtp.gmail.com', 587)
smtp.sendmail('admin@myapp.com', email, 'ยินดีต้อนรับ...')
# ...
ดีที่ตรงไหน? พรุ่งนี้เราเปลี่ยนจาก Gmail SMTP เป็น SendGrid หรือเปลี่ยนเป็นส่ง LINE Notify เราต้องมาเปิดไฟล์นี้แก้ทั้งที่ Business Logic (การสมัครสมาชิก) ไม่ได้เปลี่ยนเลย!
GOOD:
def register_user(email, password, notifier):
# ... save to database ...
notifier.send(email, 'ยินดีต้อนรับ...')
# ...
“ไม่ต้องสนว่า notification จะส่งผ่านอะไร แค่ส่งให้ได้ก็พอ”
4. UI แยกจาก Business Logic – เหตุผลที่แอป LINE ยังรอดแม้เปลี่ยนดีไซน์บ่อย
แอปธนาคารบนมือถือ: การคำนวณดอกเบี้ย การโอนเงิน Logic เหล่านี้อยู่ลึกในระบบ ส่วนหน้าตา UI จะเป็น iOS style, Android Material Design, หรือเว็บ มันแค่เรียก Logic เดียวกัน
นี่คือ Separation of Concerns ไม่ว่าคุณจะแตะปุ่มตรงไหน ยังไงเงินก็ต้องไปเข้าอีกบัญชีแบบเดียวกัน
🛑 ข้อควรระวัง: แยกจนขาดใจ
Separation of Concerns คือการแยกหน้าที่ แต่ไม่ใช่การตัดสะพานทิ้ง
บางโปรเจกต์แยกจนเกินไป:
- เว็บ 2 หน้าจอ แต่สร้าง 5 microservices
- เพิ่มฟิลด์ในตาราง ต้องแก้ 7 ชั้น กว่าจะถึง Database
จำไว้ว่า: แยกให้ดี แต่ต้องใช้งานได้จริง
🔥 สรุป
Separation of Concerns ไม่ใช่แค่เรื่องการเขียนโค้ด มันคือวิธีคิด
เวลาเราเจออะไรยุ่งๆ ให้ถามตัวเอง:
- ตอนนี้มันปนกันอยู่ตรงไหน?
- ถ้าแยกส่วนนี้ออก จะทำให้อีกส่วนยืดหยุ่นขึ้นไหม?
เริ่มจากเล็กๆ
วันนี้ลองแยก HTML กับ Logic ให้ห่างกันหน่อย
พรุ่งนี้ลองแยก Business Logic ออกจาก Database Driver
พอชำนาญ คุณจะตกใจว่าแต่ก่อนตัวเองเขียนโค้ดรวมกันเละเทะขนาดไหน
แล้วคุณจะรู้ว่า “การแยก” คือของขวัญที่ดีที่สุดที่มอบให้กับตัวคุณในอีก 6 เดือนข้างหน้า