Catatan: Robert C. Martin (alias Paman Bob) menjelaskan hal ini dengan cara yang jauh lebih baik dan lucu dalam keynote-nya, Architecture the Lost Years . Agak panjang tapi mengajarkan banyak konsep bagus.
tl; dr: Jangan pikirkan dan rencanakan aplikasi Anda dalam hal MVC. Kerangka kerja MVC hanyalah detail implementasi.
Yang paling membingungkan tentang MVC adalah, pengembang mencoba menggunakan semua komponen yang direkatkan bersama.
Cobalah berpikir dalam kerangka program, bukan kerangka kerja.
Program Anda memiliki tujuan. Dibutuhkan beberapa data, melakukan sesuatu dengan data, dan mengembalikan beberapa data.
Dengan begitu, controller
inilah mekanisme penyampaian program Anda.
- Seorang pengguna mengirimkan permintaan ke program Anda (katakanlah, tambahkan produk ke keranjang belanja).
- Pengontrol mengambil permintaan itu (info produk dan info pengguna), ia memanggil bagian yang diperlukan dari program Anda yang akan menangani permintaan ini
$user->addToCart($product)
- Program Anda (
addToCart
fungsi user
objek dalam kasus ini) melakukan pekerjaan yang dimaksudkan untuk dilakukan dan mengembalikan respons (katakanlah success
)
- Pengontrol menyiapkan respons menggunakan yang relevan
view
: mis. di objek pengontrol$this->render($cartView('success')
Dengan cara ini, pengontrol dipisahkan dari program, dan digunakan sebagai mekanisme pengiriman. Mereka tidak tahu bagaimana program Anda bekerja, mereka hanya tahu bagian mana dari program yang perlu dipanggil untuk permintaan.
Jika Anda ingin menggunakan kerangka kerja lain, aplikasi Anda tidak perlu perubahan, Anda hanya perlu menulis pengontrol yang relevan untuk memanggil program Anda untuk meminta.
Atau jika Anda ingin membuat versi desktop, aplikasi Anda akan tetap sama, Anda hanya perlu menyiapkan mekanisme pengiriman.
Dan itu Model
. Anggap saja sebagai mekanisme ketekunan.
Dengan cara OO, ada objek dalam program Anda yang menyimpan data.
class User {
//...
private $id;
private $shoppingCart;
//...
}
class Product {
//...
private $id;
//...
}
Ketika Anda menambahkan produk ke keranjang belanja, Anda dapat menambahkan product::id
ke user::shoppingCart
.
Dan ketika Anda ingin mempertahankan data, Anda bisa menggunakan model
bagian kerangka kerja, yang umumnya terdiri dari menggunakan ORM, untuk memetakan kelas ke tabel database.
Jika Anda ingin mengubah ORM yang Anda gunakan, program Anda akan tetap sama, hanya informasi pemetaan yang akan berubah. Atau jika Anda ingin menghindari database bersama-sama, Anda bisa menulis data ke file teks biasa, dan aplikasi Anda akan tetap sama.
Jadi, tuliskan program Anda terlebih dahulu. Jika Anda memprogram dengan cara 'OO', gunakan benda-benda bahasa lama yang sederhana. Jangan berpikir dalam hal MVC pada awalnya.