Memahami Arsitektur Model-View-Controller (MVC) dalam Framework PHP

📅 7 Agustus 2026 ☕ 5 min read
Memahami Arsitektur Model-View-Controller (MVC) dalam Framework PHP

Memahami Arsitektur Model-View-Controller (MVC) dalam Framework PHP

Jika kamu pernah membuka direktori proyek framework populer seperti Laravel, CodeIgniter, atau Symfony, kamu akan mendapati struktur folder yang rapi dengan nama-nama seperti Models, Views, dan Controllers.

Struktur tersebut bukan sekadar hiasan atau aturan acak, melainkan penerapan dari sebuah pola arsitektur perangkat lunak yang sangat populer: Model-View-Controller (MVC).

Pola MVC adalah fondasi utama yang wajib dipahami oleh setiap pengembang web modern. Di artikel ini, kita akan membongkar arsitektur MVC dengan analogi dunia nyata dan contoh praktis agar kamu bisa menguasainya dengan mudah!

1. Apa Itu Arsitektur MVC?

MVC adalah pola arsitektur perangkat lunak yang memisahkan logika aplikasi menjadi tiga komponen utama yang memiliki tugas dan tanggung jawab berbeda:

  • Model (M): Bagian yang mengolah data dan logika bisnis (berinteraksi langsung dengan database).

  • View (V): Bagian tampilan visual (HTML, CSS, UI) yang dilihat dan diinteraksi oleh pengguna.

  • Controller (C): Bagian otak/jembatan yang menerima permintaan dari pengguna, memprosesnya melalui Model, lalu memilih View mana yang akan ditampilkan.

┌─────────────────────────────────────────────────────────────┐
│                      PENGGUNA (Browser)                     │
└──────────────┬──────────────────────────────▲───────────────┘
               │                              │
     1. Request URL                 4. Render Tampilan HTML
               │                              │
               ▼                              │
┌─────────────────────────────────────────────┴───────────────┐
│                        CONTROLLER                           │
│              (Otak Pembagi Perintah / Jembatan)             │
└──────────────┬──────────────────────────────▲───────────────┘
               │                              │
    2. Olah Data                  3. Kembalikan Hasil Data
               │                              │
               ▼                              │
┌──────────────────────────────┐              │
│            MODEL             │──────────────┘
│ (Database & Logika Bisnis)   │
└──────────────────────────────┘

2. Analogi Dunia Nyata: Restoran Modern

Untuk membayangkan bagaimana ketiga komponen ini bekerja sama, mari gunakan analogi Restoran Modern:

 KOKI (Model)         WAITER (Controller)        PELANGGAN (View)
 [Mengolah Bahan &]  ◄───  [Menerima Pesanan &]   ◄───  [Melihat Menu &]
 [Ambil di Kulkas]         [Antarkan Makanan  ]         [Menikmati Makanan]
  1. Pelanggan (View): Duduk di meja, melihat daftar menu, dan menerima piring makanan yang cantik. Pelanggan tidak perlu tahu bagaimana cara memasak steak di dapur.

  2. Pelayan / Waiter (Controller): Datang mencatat pesanan dari pelanggan, membawa pesanan ke dapur, dan nantinya mengantarkan hidangan yang sudah jadi kembali ke meja pelanggan.

  3. Koki Dapur (Model): Menerima catatan pesanan dari pelayan, mengambil bahan baku dari kulkas (database), memasak makanan (logika bisnis), lalu menyerahkan hidangan matang ke pelayan.

Jika restoran tidak punya pembagian tugas ini (tanpa MVC), koki harus keluar melayani tamu, pelayan ikut memasak, dan dapur akan kekacauan total!

3. Tugas dan Tanggung Jawab Masing-Masing Komponen

Mari kita bedah peran setiap komponen dalam kode PHP nyata:

A. Model (Pengelola Data)

Model bertanggung jawab atas segala sesuatu yang berhubungan dengan data dan database.

  • Tugas Utama: Mengambil data, menyimpan data baru, memperbarui data, menghapus data, dan menguji validasi logika bisnis.

  • Ciri-ciri: Model tidak pernah tahu bagaimana data akan ditampilkan di layar. Ia hanya peduli pada kebenaran data.

PHP

 

<?php
// app/Models/Produk.php
namespace App\Models;

class Produk {
    // Model mengambil data langsung dari database
    public static function getProdukMurah(): array {
        // Dalam framework, ini biasanya menggunakan ORM seperti Eloquent
        return [
            ['id' => 1, 'nama' => 'Kopi Hitam', 'harga' => 15000],
            ['id' => 2, 'nama' => 'Teh Manis', 'harga' => 5000],
        ];
    }
}

B. View (Tampilan Antarmuka)

View adalah lapisan presentasi yang bertugas menampilkan data kepada pengguna.

  • Tugas Utama: Menerima data dari Controller dan mengolahnya menjadi tag HTML, CSS, dan JavaScript.

  • Ciri-ciri: View harus dibuat "sebodoh" mungkin (dumb view). Jangan menaruh query SQL atau logika aplikasi yang rumit di dalam file View!

HTML

 

<!-- app/Views/produk/index.php -->
<!DOCTYPE html>
<html>
<head>
    <title>Daftar Produk Murah</title>
</head>
<body>
    <h1>Katalog Produk Termurah</h1>
    <ul>
        <!-- View hanya bertugas menampilkan data yang dikirimkan Controller -->
        <?php foreach ($daftarProduk as $item): ?>
            <li><?= $item['nama'] ?> - Rp <?= number_format($item['harga']) ?></li>
        <?php endforeach; ?>
    </ul>
</body>
</html>

C. Controller (Otak Pengatur Alur)

Controller adalah perantara yang menerima permintaan (request) pengguna, lalu memutuskan apa yang harus dilakukan.

  • Tugas Utama:

    1. Membaca parameter permintaan pengguna (seperti ID atau kata kunci pencarian).

    2. Memanggil Model untuk mengambil data.

    3. Mengoper data tersebut ke View yang tepat.

PHP

 

<?php
// app/Controllers/ProdukController.php
namespace App\Controllers;

use App\Models\Produk;

class ProdukController {
    public function index() {
        // 1. Minta data dari Model
        $dataProduk = Produk::getProdukMurah();

        // 2. Kirim data ke View dan tampilkan ke pengguna
        return view('produk/index', ['daftarProduk' => $dataProduk]);
    }
}

4. Mengapa Arsitektur MVC Sangat Penting?

Mengapa hampir seluruh framework modern (Laravel, CodeIgniter, Django, Ruby on Rails) mengadopsi pola MVC?

  1. Separation of Concerns (Pemisahan Tanggung Jawab): Kode logika, pengolah data, dan tampilan tidak lagi bercampur aduk dalam satu file.

  2. Kerja Tim yang Paralel: Pengembang Back-End bisa fokus mengerjakan kode di bagian Model dan Controller, sementara pengembang Front-End / UI-UX bisa menghias file di bagian View secara bersamaan tanpa saling mengganggu.

  3. Kemudahan Reusability (Penggunaan Ulang): Satu Model yang sama (misalnya User.php) bisa digunakan oleh banyak Controller yang berbeda (seperti AdminController, APIController, dan ProfileController).

  4. Mudah Dirawat & Dirapikan (Maintainability): Jika ada perubahan desain tampilan, kamu cukup mengubah file View tanpa takut merusak sistem logika database di Model.

Kesimpulan

Pola arsitektur Model-View-Controller (MVC) adalah standar emas dalam dunia pengembangan web modern. Dengan memisahkan tanggung jawab antara pengolah data (Model), penyaji tampilan (View), dan pengatur alur (Controller), aplikasi yang kamu bangun akan jauh lebih rapi, terstruktur, dan siap dikembangkan bersama tim.

 


+