- 2011/01/21

Tulisan ini adalah pandangan saya terhadap pengertian umum MVC.

MODEL

Komponen yang sering disalah artikan, sering di-anak tiri-kan. Semua perhatian terlalu banyak pada Controller, Controller dan Controller. Sekarang, jika ada pernyataan seperti ini : “Model adalah representasi database/tabel, View tidak bisa mengakses Model, yang bisa mengakses Model adalah Controller, kemudian Controller memberikan data tersebut ke View”. Lalu ketika saya mengambil data dari, misalnya, Youtube/RSS/Flickr. Apa itu bisa disebut Model ?? menurut pendapat saya, Iya. Data yang saya ambil dari web service tersebut tidak ada didalam tabel/database. Berarti (menurut pendapat saya) Model bukan melulu tentang tabel/database. Model hanya class, class yang tidak tergantung pada framework aplikasi, mereka hanya class simpel yang berisi abstraksi permodelan data, “panggil dan pakai dia dari mana saja (V+C)”. Model itu sesuatu yang seharusnya “gemuk”, bukan Controller.

VIEW

(Lihat/Gambaran/Pandangan/Penglihatan). Dia adalah apa yang dilihat ketika kita menerima respon dari Controller. Ini bukan berarti bahwa View akan hadir hanya ketika Controller memerintahkan dia hadir. Tanpa perintah dari Controller-pun dia bisa hadir sebagai respon yang menampilkan data dari Model (tentunya dalam mode read-only), ya, read-only. Saya lebih menyukai View Helper, salah satu design pattern dari J2EE yang bisa membantu View untuk mengakses Model secara read-only (untuk write-mode ditangani oleh Controller, karena input yang masuk harus divalidasi dulu).

CONTROLLER

Namanya saja Controller (Pengawas/Penilik/Kontrolir). Jadi ya tugasnya hanya menerima, memvalidasi+menjalurkan request/input dan memilih View mana yang akan dikembalikan sebagai bentuk respon terhadap request yang diterimanya. Controller tidak perlu gemuk, dia TIDAK SEHARUSNYA menjadi pusat akses data. Akses data tersebut, misalkan, didalam Controller tidak perlu ada sintak Zend_Db_Table, Select, query SQL, atau apalah istilahnya yang berkaitan dengan data akses. Controller itu ada hanya untuk menerima/menjalurkan/merespon request. TITIK. Kenapa dia bukan tempat untuk menulis akses data ?? bayangkan saja keadaan seperti ini, kita menulis akses data di setiap Controller, sedangkan Controller terdiri dari banyak Action, berapa banyak duplikasi-nya ?? Iya klo Controller cuma satu, bagaimana jika Controller dalam aplikasi yang kita tulis ada sepuluh ?? Pasti bisa dibayangkan repotnya me-manage akses data yang ada di Controller tersebut ketika terjadi perubahan, refactoring, atau unit testing. :) Kita juga tidak bisa menggunakan ulang Controller tanpa menyertakan obyek request/respon, penerapan action helper, inisialisasi View yang ada didalamnya.

Lalu apa kesimpulan tentang pandangan saya tersebut diatas ?

  • Model adalah BUKAN hanya tentang akses entitas tabel/database. Dia suatu class abstraksi data yang seharusnya gemuk, independent, dan bisa digunakan berulang/ulang (reusable).
  • Controller adalah proses/penjalur request/validator input/pemilih View. Dia BUKAN tempat untuk menulis data akses. Dan Controller yang baik adalah, Controller yang tidak perlu ada.
  • View dia bisa mengakses Model tanpa harus diperintahkan Controller. Satu View bisa menggunakan beberapa Model.