Memahami Konsep MVC Sederhana: Fondasi Web Development Modern
MVC adalah salah satu design pattern paling populer dalam web development. Dalam tutorial ini, kita akan mempelajari konsep MVC dengan cara yang mudah dipahami, tanpa jargon yang membingungkan.
---
Apa itu MVC?
MVC adalah singkatan dari: - M - Model - V - View - C - ControllerIni adalah cara untuk memisahkan kode berdasarkan fungsinya, sehingga lebih mudah dikelola dan dikembangkan.
Analogi Sederhana: Restoran
Bayangkan Anda sedang di restoran:
| Komponen | Di Restoran | Di MVC |
|----------|-------------|---------|
| Customer | Anda (pelanggan) | User/Browser |
| Waiter | Pelayan | Controller |
| Chef | Koki | Model |
| Food | Makanan | Data |
| Plate | Piring penyajian | View |
---
Konsep Dasar MVC
1. Model (M)
Model bertanggung jawab untuk: - Mengelola data - Berkomunikasi dengan database - Business logic (aturan bisnis) Contoh tugas Model: ``` - Ambil data user dari database - Simpan data produk baru - Validasi data sebelum disimpan - Hitung total harga pesanan ``` Analogi: Model adalah koki yang mengolah bahan mentah (database) menjadi data yang siap digunakan.2. View (V)
View bertanggung jawab untuk: - Menampilkan data ke user - User interface (HTML, CSS) - Tidak ada logic di sini Contoh tugas View: ``` - Tampilkan daftar produk dalam bentuk tabel - Tampilkan form input - Tampilkan pesan error dengan warna merah ``` Analogi: View adalah piring yang menyajikan data dengan cantik ke customer.3. Controller (C)
Controller bertanggung jawab untuk: - Menerima request dari user - Memproses input - Memanggil Model untuk ambil/simpan data - Memilih View mana yang akan ditampilkan Contoh tugas Controller: ``` - User klik "Lihat Produk" → panggil Model untuk ambil data - User submit form → validasi input, panggil Model untuk simpan - Pilih View mana yang akan ditampilkan (list, form, dll) ``` Analogi: Controller adalah pelayan yang jadi penghubung antara customer (user) dan koki (model).---
Alur Kerja MVC
```
1. User Request
↓
2. Controller menerima request
↓
3. Controller panggil Model (jika perlu data)
↓
4. Model akses Database
↓
5. Model return data ke Controller
↓
6. Controller kirim data ke View
↓
7. View render HTML
↓
8. Response ke User
```
Diagram Alur
```
┌──────────┐
│ User │
│ (Browser)│
└────┬─────┘
│
│ Request
↓
┌─────────────────┐
│ Controller │ ←── Koordinator
│ │
│ - Terima request│
│ - Proses input │
│ - Panggil Model │
│ - Load View │
└────┬───────┬────┘
│ │
│ └──────────────────┐
│ │
↓ ↓
┌─────────────────┐ ┌─────────────────┐
│ Model │ │ View │
│ │ │ │
│ - Business logic│ │ - UI (HTML) │
│ - Data access │ │ - Template │
│ - Validation │ │ - Display data │
└────┬────────────┘ └─────────────────┘
│
↓
┌─────────────────┐
│ Database │
│ │
│ - MySQL │
│ - PostgreSQL │
└─────────────────┘
```
---
Implementasi Sederhana
Mari kita buat contoh sederhana untuk menampilkan daftar produk.
Struktur Folder
```
project/
├── index.php (Entry point)
├── controllers/
│ └── ProductController.php
├── models/
│ └── Product.php
└── views/
└── product_list.php
```
1. Model (Product.php)
```php
// models/Product.php
class Product {
private $db;
public function __construct($database) {
$this->db = $database;
}
// Ambil semua produk dari database
public function getAll() {
$query = "SELECT * FROM products";
$result = $this->db->query($query);
return $result->fetch_all(MYSQLI_ASSOC);
}
// Ambil produk berdasarkan ID
public function getById($id) {
$query = "SELECT * FROM products WHERE id = ?";
$stmt = $this->db->prepare($query);
$stmt->bind_param("i", $id);
$stmt->execute();
return $stmt->get_result()->fetch_assoc();
}
}
?>
```
2. Controller (ProductController.php)
```php
// controllers/ProductController.php
class ProductController {
private $model;
public function __construct($productModel) {
$this->model = $productModel;
}
// Aksi untuk menampilkan daftar produk
public function index() {
// Ambil data dari Model
$products = $this->model->getAll();
// Kirim data ke View
include 'views/product_list.php';
}
// Aksi untuk menampilkan detail produk
public function show($id) {
// Ambil data dari Model
$product = $this->model->getById($id);
// Kirim data ke View
include 'views/product_detail.php';
}
}
?>
```
3. View (product_list.php)
```php
Daftar Produk
| ID | Nama | Harga |
|---|---|---|
| Rp |
4. Entry Point (index.php)
```php
// index.php
// 1. Setup database connection
$db = new mysqli('localhost', 'root', '', 'toko_db');
// 2. Load Model
require_once 'models/Product.php';
$productModel = new Product($db);
// 3. Load Controller
require_once 'controllers/ProductController.php';
$controller = new ProductController($productModel);
// 4. Routing sederhana
$action = $_GET['action'] ?? 'index';
if ($action == 'index') {
$controller->index();
} elseif ($action == 'show') {
$id = $_GET['id'] ?? 1;
$controller->show($id);
}
?>
```
---
Keuntungan Menggunakan MVC
1. Separation of Concerns
Setiap bagian punya tanggung jawab sendiri:
- Model → Data
- View → Tampilan
- Controller → Logic
2. Mudah Dikembangkan
```
Mau ubah tampilan? → Edit View saja
Mau ubah logic? → Edit Controller saja
Mau ubah struktur data? → Edit Model saja
```
3. Tim Bisa Kerja Paralel
- Frontend developer → fokus di View
- Backend developer → fokus di Model & Controller
4. Mudah di-Testing
Bisa test Model, Controller, View secara terpisah.
5. Reusable
Model yang sama bisa dipakai untuk berbagai View (web, mobile app, API).
---
Kapan Menggunakan MVC?
✅ Cocok Untuk:
- Aplikasi web yang kompleks - Project yang dikerjakan tim - Aplikasi yang sering berubah requirement - Long-term project❌ Overkill Untuk:
- Landing page sederhana - Website statis - Prototype cepat - Project sangat kecil (1-2 halaman)---
Framework yang Menggunakan MVC
| Framework | Bahasa | Popularitas |
|-----------|--------|-------------|
| Laravel | PHP | ⭐⭐⭐⭐⭐ |
| CodeIgniter | PHP | ⭐⭐⭐⭐ |
| Symfony | PHP | ⭐⭐⭐⭐ |
| Django | Python | ⭐⭐⭐⭐⭐ |
| Ruby on Rails | Ruby | ⭐⭐⭐⭐ |
---
Tips Implementasi MVC
1. Jangan Taruh Logic di View
❌ Salah:
```php
// Query database di View? NO!
$result = mysqli_query($db, "SELECT * FROM products");
```
✅ Benar:
```php
```
2. Jangan Taruh HTML di Model
❌ Salah:
```php
// Model.php
public function getProductTable() {
return "
}
```
✅ Benar:
```php
// Model.php
public function getAll() {
return $data; // Return data saja
}
```
3. Controller Tetap Lean
Controller jangan terlalu gemuk. Jika logic terlalu banyak, pindahkan ke Model atau buat Service class.
---
Kesimpulan
MVC membantu kita membuat aplikasi yang:
- ✅ Terstruktur rapi
- ✅ Mudah dimaintain
- ✅ Scalable untuk project besar
- ✅ Mudah dikerjakan tim
Dengan memahami MVC, Anda sudah siap untuk belajar framework modern seperti Laravel, CodeIgniter, atau framework lainnya yang menggunakan pattern ini.
Semangat belajar! 🚀
---
Artikel terkait: - Cara Setup XAMPP untuk Pemula - Tutorial PHP CRUD dengan MVC (coming soon) - Pengenalan Laravel untuk Pemula (coming soon)---
*Artikel ini ditulis pada 20 Januari 2026
Kategori: Tutorial
Tag: #mvc #architecture #design-pattern #pemula*