Bayangkan Anda membuat halaman daftar produk sederhana dengan PHP. Di satu berkas, Anda menaruh koneksi ke basis data, perintah untuk mengambil data, logika penghitungan diskon, sekaligus kode HTML untuk menampilkannya. Untuk lima baris kode, cara ini terasa praktis. Masalah muncul ketika aplikasi tumbuh. Satu berkas berubah menjadi ratusan baris tempat query database, aturan bisnis, dan tampilan bercampur tanpa batas. Mengubah warna tombol berisiko merusak perhitungan harga, dan dua orang tidak bisa mengerjakan berkas yang sama tanpa saling menimpa.

Untuk merapikan kekacauan seperti itulah pola MVC digunakan. MVC adalah pola arsitektur perangkat lunak yang memisahkan sebuah aplikasi menjadi tiga bagian dengan tanggung jawab berbeda: Model, View, dan Controller. Alih-alih menumpuk semuanya di satu tempat, setiap bagian mengurus satu urusan saja. Artikel ini membahas pengertian, ketiga komponen, cara kerja, kelebihan, kelemahan, hingga contoh penerapannya pada framework nyata.

Apa Itu MVC?

MVC adalah singkatan dari Model-View-Controller. Ketiganya adalah nama tiga lapisan yang membagi tugas dalam sebuah aplikasi. Model mengurus data dan aturan bisnis, View mengurus tampilan yang dilihat pengguna, dan Controller mengatur alur di antara keduanya. Prinsip yang menyatukannya sederhana: satu bagian, satu tanggung jawab. Konsep ini dikenal sebagai separation of concerns (pemisahan urusan).

Pola ini bukan barang baru. MVC pertama kali dirumuskan oleh Trygve Reenskaug pada tahun 1979 saat ia bekerja di Xerox PARC, laboratorium riset yang melahirkan banyak konsep komputasi modern. Rancangan awalnya bahkan memiliki empat bagian sebelum akhirnya disederhanakan menjadi tiga. Meski lahir untuk antarmuka desktop era Smalltalk, gagasan intinya bertahan dan justru menjadi fondasi hampir semua framework pengembangan web hari ini.

Perlu diperhatikan bahwa MVC bukan bahasa pemrograman dan bukan pula sebuah aplikasi yang bisa Anda unduh. Ia adalah pola, yaitu cara menata kode yang bisa Anda terapkan dengan bahasa apa pun, baik PHP, Java, Python, maupun C#.

Masalah yang Sebenarnya Diselesaikan MVC

Untuk memahami MVC, ada baiknya melihat dulu apa yang terjadi tanpa MVC. Kembali ke contoh halaman produk tadi, kode "campur aduk" itu memunculkan beberapa persoalan nyata seiring aplikasi membesar.

Pertama, kode menjadi sulit dirawat. Ketika tampilan dan logika bisnis berada di berkas yang sama, mengubah salah satunya bisa merusak yang lain tanpa Anda sadari. Kedua, kolaborasi tim jadi menyakitkan. Seorang desainer yang hanya ingin menata tampilan terpaksa mengarungi baris-baris query database. Ketiga, kode sulit diuji. Menguji aturan bisnis secara terpisah nyaris mustahil kalau ia menempel erat pada kode HTML.

MVC menjawab ketiga persoalan itu dengan satu langkah: memisahkan urusan. Aturan bisnis pindah ke Model, tampilan pindah ke View, dan pengaturan alur pindah ke Controller. Setelah dipisah, desainer bisa menyentuh View tanpa takut merusak Model, dan aturan bisnis bisa diuji sendiri tanpa perlu membuka halaman di browser.

Tiga Komponen MVC

Inti dari pola ini terletak pada pembagian peran ketiga komponennya. Agar lebih mudah dibayangkan, kita gunakan analogi sebuah restoran.

Model

Model adalah lapisan yang mengurus data dan aturan bisnis. Di sinilah kode yang berhubungan dengan basis data berada: mengambil, menyimpan, mengubah, dan menghapus data. Model juga memuat aturan seperti "harga tidak boleh negatif" atau "stok berkurang setiap ada pesanan". Dalam analogi restoran, Model adalah dapur beserta gudang bahan. Ia tahu resep dan persediaan, tetapi tidak pernah berurusan langsung dengan pelanggan.

View

View adalah lapisan yang mengurus tampilan, yaitu apa yang benar-benar dilihat pengguna di layar. Isinya umumnya kode HTML, CSS, dan sedikit tampilan dinamis untuk menyisipkan data. View sengaja dibuat "bodoh": tugasnya hanya menampilkan data yang sudah disiapkan, bukan mengambil atau mengolahnya. Dalam analogi restoran, View adalah piring saji dan penataan meja. Ia menyajikan makanan dengan rapi, tetapi tidak ikut memasak.

Controller

Controller adalah lapisan penghubung yang mengatur alur. Ia menerima permintaan dari pengguna, meminta data yang diperlukan kepada Model, lalu menyerahkan data itu kepada View untuk ditampilkan. Controller adalah pengambil keputusan: menentukan Model mana yang dipanggil dan View mana yang dikembalikan. Dalam analogi restoran, Controller adalah pelayan. Ia menerima pesanan dari pelanggan, meneruskannya ke dapur, lalu membawa hidangan yang sudah jadi kembali ke meja.

Cara Kerja MVC: Menelusuri Satu Permintaan

Cara paling jelas memahami arsitektur MVC adalah dengan mengikuti satu permintaan dari awal sampai akhir. Misalkan seorang pengunjung membuka halaman daftar artikel di sebuah situs.

Prosesnya berjalan seperti ini. Browser mengirim permintaan ke server. Sistem perutean (routing) membaca alamat yang diminta dan mengarahkannya ke Controller yang tepat. Controller lalu meminta data artikel kepada Model. Model mengambil data itu dari basis data dan mengembalikannya. Setelah menerima data, Controller menyerahkannya ke View. View menyusun data menjadi halaman HTML yang utuh, lalu server mengirimkan halaman itu kembali ke browser pengunjung.

Diagram berikut merangkum alur tersebut.

Diagram alur kerja MVC dari browser, routing, controller, model, basis data, hingga view yang mengembalikan halaman HTML.Diagram alur kerja MVC dari browser, routing, controller, model, basis data, hingga view yang mengembalikan halaman HTML.

Yang penting dari alur ini adalah setiap komponen tetap berada di jalurnya. Model tidak pernah tahu bentuk tampilannya, dan View tidak pernah menyentuh basis data secara langsung. Semua koordinasi dilakukan lewat Controller. Karena permintaan diproses di sisi server (server side) sebelum halaman jadi dikirim, pola ini sangat pas untuk aplikasi web yang datanya berubah-ubah.

Contoh MVC pada Framework Laravel

Konsep di atas akan lebih membumi kalau dipetakan ke proyek nyata. Laravel, salah satu framework PHP paling populer, menata proyeknya persis mengikuti MVC. Ketiga komponen punya folder masing-masing:

  1. Model berada di app/Models/. Setiap kelas di sini biasanya mewakili satu tabel basis data beserta aturan bisnisnya.
  2. Controller berada di app/Http/Controllers/. Kelas di sini menerima permintaan, memanggil Model, dan menentukan View.
  3. View berada di resources/views/. Laravel memakai Blade, mesin templat yang memudahkan menyisipkan data ke dalam HTML.

Untuk kasus halaman daftar artikel tadi, alurnya kira-kira begini. Sebuah kelas ArticleController menerima permintaan, memanggil model Article untuk mengambil seluruh data artikel, lalu mengoperkan data itu ke sebuah berkas View bernama articles/index.blade.php. View tersebut yang menyusunnya menjadi daftar yang rapi. Setiap potongan kode berada di tempat yang bisa ditebak, sehingga pengembang baru pun cepat menemukan apa yang perlu diubah.

Diagram pemetaan komponen MVC ke struktur folder Laravel.Diagram pemetaan komponen MVC ke struktur folder Laravel.

Supaya lebih konkret, mari kita lihat potongan kodenya. Controller menerima permintaan, meminta data kepada Model, lalu memilih View yang akan menampilkannya:

PHP
// app/Http/Controllers/ArticleController.php
class ArticleController extends Controller
{
    public function index()
    {
        $articles = Article::all();        // minta seluruh data ke Model
        return view('articles.index', [
            'articles' => $articles,       // serahkan data ke View
        ]);
    }
}

Perhatikan bahwa Controller tidak menulis satu pun perintah basis data secara langsung. Tugas itu diserahkan ke Model, yang memetakan dirinya ke sebuah tabel di basis data seperti MySQL:

PHP
// app/Models/Article.php
class Article extends Model
{
    // Laravel otomatis menghubungkan kelas ini ke tabel "articles"
}

Model seramping ini sudah cukup untuk operasi dasar menampilkan, menambah, mengubah, dan menghapus data — pola yang dikenal sebagai CRUD. Terakhir, View hanya bertugas menata data yang diterima menjadi HTML dengan bantuan Blade:

BLADE
{{-- resources/views/articles/index.blade.php --}}
@foreach ($articles as $article)
    <h2>{{ $article->title }}</h2>
    <p>{{ $article->body }}</p>
@endforeach

Tidak ada kode pengambilan data di View, dan tidak ada kode HTML di Controller. Setiap berkas hanya mengurus bagiannya sendiri, persis seperti pembagian peran yang kita bahas sejak awal.

Laravel bukan satu-satunya. CodeIgniter dan Symfony di PHP, ASP.NET MVC dari Microsoft di C#, hingga Spring MVC di dunia Java juga membangun kerangka kerjanya di atas pola yang sama. Setelah Anda paham MVC di satu framework, Anda akan mengenali polanya di framework lain dengan cepat.

Kelebihan Menggunakan MVC

Pemisahan tiga lapisan ini membawa sejumlah keuntungan praktis, terutama saat aplikasi dan tim membesar.

  1. Kode lebih mudah dirawat: Karena tampilan, data, dan alur terpisah, memperbaiki satu bagian tidak gampang merusak bagian lain. Anda tahu persis di lapisan mana sebuah persoalan harus diselesaikan.
  2. Kolaborasi tim lebih lancar: Desainer bisa mengerjakan View sementara pengembang backend menggarap Model, tanpa saling menunggu atau menimpa berkas yang sama.
  3. Lebih mudah diuji: Aturan bisnis di Model bisa diuji terpisah tanpa perlu membuka halaman di browser, sehingga pengujian otomatis jadi lebih sederhana.
  4. Kode bisa dipakai ulang: Satu Model yang sama bisa melayani beberapa View berbeda, misalnya halaman web dan respons API, tanpa menulis ulang logika datanya.
  5. Struktur yang terprediksi: Karena setiap komponen punya tempat baku, pengembang baru lebih cepat memahami alur proyek yang sudah berjalan.

Kelemahan dan Hal yang Perlu Anda Pertimbangkan

MVC bukan solusi untuk segala situasi. Ada beberapa hal yang perlu Anda timbang sebelum memakainya.

Pertama, MVC bisa berlebihan untuk proyek yang sangat kecil. Membuat satu skrip sederhana penampil "Hello World" tidak perlu dipecah menjadi tiga lapisan dengan banyak berkas. Struktur MVC justru menambah kerumitan yang tidak sepadan untuk kasus seperti itu.

Kedua, ada kurva belajar bagi pemula. Alih-alih satu berkas, Anda kini harus memahami bagaimana ketiga komponen saling bicara. Bagi yang baru mulai, ini terasa lebih rumit di awal, meski terbayar setelah aplikasi membesar.

Ketiga, jumlah berkas bertambah banyak. Fitur sederhana pun bisa menyentuh tiga folder sekaligus. Untuk aplikasi kecil, berpindah-pindah antar berkas ini kadang terasa merepotkan.

Keempat, ada risiko fat controller, yaitu Controller yang terlalu gemuk. Karena Controller berada di tengah, pengembang sering tergoda menumpuk banyak logika di sana. Padahal aturan bisnis idealnya tinggal di Model. Menjaga Controller tetap ramping butuh disiplin.

Sederhananya, MVC bersinar pada aplikasi berukuran menengah ke atas yang dikembangkan dalam waktu panjang atau oleh banyak orang. Untuk skrip sekali pakai, pola yang lebih ringan justru lebih masuk akal.

MVC vs MVVM vs MVP

Anda mungkin menemukan istilah serupa seperti MVVM dan MVP. Ketiganya berbagi gagasan yang sama, yaitu memisahkan data dari tampilan, tetapi berbeda pada bagian penghubungnya.

PolaPenghubungUmum dipakai di
MVCControllerAplikasi web (Laravel, ASP.NET)
MVPPresenterAplikasi desktop dan Android klasik
MVVMViewModelAntarmuka modern (Android Jetpack, Vue, WPF)

Untuk pengembangan web dan bagi Anda yang baru belajar, MVC adalah titik awal yang paling relevan. Setelah memahaminya, dua pola lain akan terasa sebagai variasi dari ide yang sama.

FAQ Seputar MVC

Apakah MVC sebuah bahasa pemrograman? Bukan. MVC adalah pola atau cara menata kode. Ia bisa diterapkan di banyak bahasa, seperti PHP, Java, Python, dan C#.

Apa kepanjangan dari MVC? MVC adalah singkatan dari Model-View-Controller, yaitu tiga komponen yang membagi tanggung jawab dalam sebuah aplikasi.

Apakah MVC hanya untuk aplikasi web? Tidak. MVC awalnya justru lahir untuk antarmuka desktop. Namun saat ini pemakaiannya paling banyak dijumpai di framework pengembangan web.

Framework apa saja yang memakai MVC? Beberapa yang populer adalah Laravel, CodeIgniter, dan Symfony untuk PHP, ASP.NET MVC untuk C#, serta Spring MVC untuk Java. Banyak framework lain juga mengadopsi pola serupa.

Kesimpulan

MVC adalah pola arsitektur yang memisahkan aplikasi menjadi tiga lapisan: Model untuk data dan aturan bisnis, View untuk tampilan, dan Controller untuk mengatur alur di antaranya. Pemisahan ini membuat kode lebih mudah dirawat, diuji, dan dikerjakan bersama tim. Sebagai imbalannya, ada kurva belajar dan struktur yang lebih banyak berkas, sehingga pola ini paling terasa manfaatnya pada aplikasi menengah ke atas, bukan skrip kecil sekali pakai.

Kalau Anda sedang mulai belajar framework seperti Laravel, memahami MVC lebih dulu akan membuat struktur folder proyek terasa masuk akal, bukan sekadar aturan yang dihafal. Semoga artikel ini membantu.