MVC คืออะไร?
MVC (Model-View-Controller) เป็นรูปแบบการออกแบบซอฟต์แวร์ที่ใช้แยกโครงสร้างการพัฒนาแอปพลิเคชันออกเป็น 3 ส่วน ได้แก่ Model, View และ Controller เพื่อให้ซอฟต์แวร์สามารถพัฒนา บำรุงรักษา และขยายได้ง่ายขึ้น นอกจากนี้ยังช่วยเพิ่มความชัดเจนในการแบ่งหน้าที่และความรับผิดชอบของแต่ละส่วน
การทำความเข้าใจ MVC
- Model
- เป็นส่วนที่จัดการข้อมูลและตรรกะของแอปพลิเคชัน โดยจะเชื่อมต่อกับฐานข้อมูลหรือแหล่งข้อมูลต่าง ๆ
- ทำหน้าที่เพิ่ม, แก้ไข, ลบ และดึงข้อมูล
- ตัวอย่าง: ในแอปพลิเคชันร้านค้าออนไลน์ Model จัดการข้อมูลสินค้าหรือข้อมูลลูกค้า
- View
- เป็นส่วนที่แสดงผลข้อมูลให้กับผู้ใช้งาน (User Interface)
- ทำหน้าที่แสดงข้อมูลจาก Model และรับการโต้ตอบจากผู้ใช้
- ตัวอย่าง: แสดงหน้าเว็บไซต์รายการสินค้าหรือฟอร์มการกรอกข้อมูล
- Controller
- เป็นส่วนที่ทำหน้าที่ควบคุมการทำงานระหว่าง Model และ View
- รับคำสั่งจากผู้ใช้งาน (เช่น คลิกปุ่มหรือกรอกข้อมูล) แล้วสั่งให้ Model ประมวลผล และนำผลลัพธ์ไปแสดงใน View
- ตัวอย่าง: เมื่อผู้ใช้กดปุ่ม “เพิ่มสินค้า” Controller จะสั่งให้ Model บันทึกข้อมูล และอัปเดต View ให้แสดงรายการสินค้าใหม่
การทำงานของ MVC โดยรวม
การทำงานของ MVC โดยรวม
Controller สั่งให้ View แสดงผลลัพธ์นั้นให้ผู้ใช้เห็น
ผู้ใช้โต้ตอบกับ View (เช่น การกรอกฟอร์มหรือคลิกปุ่ม)
View ส่งข้อมูลไปยัง Controller เพื่อประมวลผลคำสั่ง
Controller จะประสานกับ Model เพื่อจัดการข้อมูลตามคำสั่งที่ได้รับ
Model จัดการข้อมูลและส่งผลลัพธ์กลับไปให้ Controller
ตัวอย่างการใช้งาน MVC ใน Laravel
สมมติว่าเราต้องการสร้างระบบการจัดการสินค้า ซึ่งประกอบด้วยการเพิ่ม ลบ แก้ไข และแสดงรายการสินค้า
Model: สร้าง Model ชื่อว่า Product
เพื่อจัดการกับตาราง products
ในฐานข้อมูล ซึ่งใช้ในการเก็บข้อมูลสินค้าต่าง ๆ
php artisan make:model Product -m
คำสั่งนี้จะสร้างทั้ง Model และไฟล์ Migration สำหรับสร้างตาราง products
Controller: สร้าง Controller ชื่อว่า ProductController
เพื่อจัดการกับคำขอที่เกี่ยวข้องกับสินค้า เช่น การเพิ่ม แก้ไข และลบ
php artisan make:controller ProductController --resource
คำสั่งนี้จะสร้าง Resource Controller ที่มีฟังก์ชันสำหรับจัดการสินค้าแบบครบวงจร เช่น index()
, store()
, update()
View: สร้าง View เพื่อแสดงผลรายการสินค้า และแบบฟอร์มสำหรับเพิ่มหรือแก้ไขสินค้า โดยใช้ Blade Template ในโฟลเดอร์ resources/views
ตัวอย่างโค้ด MVC ใน PHP
<?php
// Model - จัดการข้อมูลสินค้า
class Product {
private $products = [
1 => ["name" => "Laptop", "price" => 1000],
2 => ["name" => "Smartphone", "price" => 500],
3 => ["name" => "Tablet", "price" => 300]
];
public function getAllProducts() {
return $this->products;
}
public function getProductById($id) {
return $this->products[$id] ?? null;
}
}
// Controller - ควบคุมการทำงาน
class ProductController {
private $productModel;
public function __construct() {
$this->productModel = new Product();
}
public function list() {
$products = $this->productModel->getAllProducts();
$this->render('productList', ['products' => $products]);
}
public function show($id) {
$product = $this->productModel->getProductById($id);
if ($product) {
$this->render('productDetail', ['product' => $product]);
} else {
echo "Product not found!";
}
}
private function render($view, $data) {
extract($data);
include "{$view}.php";
}
}
// Routing และเรียกใช้งาน Controller
$controller = new ProductController();
$action = $_GET['action'] ?? 'list';
$id = $_GET['id'] ?? null;
if ($action === 'list') {
$controller->list();
} elseif ($action === 'show' && $id) {
$controller->show($id);
} else {
echo "Invalid action!";
}
?>
<!-- View: productList.php -->
<?php if (isset($products)): ?>
<!DOCTYPE html>
<html>
<head>
<title>Product List</title>
</head>
<body>
<h1>Product List</h1>
<ul>
<?php foreach ($products as $id => $product): ?>
<li>
<?= htmlspecialchars($product["name"]) ?> - $<?= htmlspecialchars($product["price"]) ?>
<a href="?action=show&id=<?= $id ?>">View Details</a>
</li>
<?php endforeach; ?>
</ul>
</body>
</html>
<?php endif; ?>
<!-- View: productDetail.php -->
<?php if (isset($product)): ?>
<!DOCTYPE html>
<html>
<head>
<title>Product Details</title>
</head>
<body>
<h1>Product Details</h1>
<p>Name: <?= htmlspecialchars($product["name"]) ?></p>
<p>Price: $<?= htmlspecialchars($product["price"]) ?></p>
<a href="?action=list">Back to List</a>
</body>
</html>
<?php endif; ?>
การนำไปใช้งาน
การทำความเข้าใจ MVC ช่วยให้นักพัฒนาสามารถออกแบบแอปพลิเคชันได้อย่างมีประสิทธิภาพ และสามารถทำงานร่วมกับทีมอื่น ๆ ได้ง่าย การแยกส่วนของระบบออกเป็น Model, View, และ Controller ช่วยให้แต่ละส่วนสามารถปรับปรุงหรือพัฒนาได้โดยไม่ส่งผลกระทบต่อส่วนอื่น ๆ ของระบบมากนัก
MVC จึงเหมาะสำหรับการพัฒนาระบบที่มีขนาดใหญ่ หรือระบบที่ต้องการการดูแลรักษาอย่างต่อเนื่อง