Sebagai seorang programmer yang serius, bagaimana Anda menjawab pertanyaan Apa itu MVC?
Dalam pikiran saya, MVC adalah semacam topik yang samar-samar - dan karena itu, jika audiens Anda adalah pelajar, maka Anda bebas untuk menggambarkannya secara umum yang tidak mungkin kontroversial.
Namun, jika Anda berbicara kepada audiens yang berpengetahuan luas, terutama pewawancara, saya mengalami kesulitan memikirkan arah untuk mengambil yang tidak mengambil risiko reaksi "baik itu tidak benar! ...". Kita semua memiliki pengalaman dunia nyata yang berbeda, dan saya belum pernah benar-benar bertemu pola implementasi MVC yang sama dua kali.
Secara khusus, tampaknya ada perbedaan pendapat tentang keketatan, definisi komponen, pemisahan bagian (bagian mana yang cocok), dll.
Jadi, bagaimana saya harus menjelaskan MVC dengan cara yang benar, singkat, dan tidak kontroversial?
sumber
Jawaban:
MVC adalah arsitektur perangkat lunak - struktur sistem - yang memisahkan logika domain / aplikasi / bisnis (apa pun yang Anda inginkan) dari antarmuka pengguna lainnya. Ini dilakukan dengan memisahkan aplikasi menjadi tiga bagian: model, tampilan, dan pengontrol.
Model ini mengelola perilaku dan data dasar aplikasi. Ia dapat merespons permintaan informasi, merespons instruksi untuk mengubah keadaan informasinya, dan bahkan memberi tahu pengamat dalam sistem yang didorong oleh peristiwa ketika informasi berubah. Ini bisa berupa database, atau sejumlah struktur data atau sistem penyimpanan. Singkatnya, ini adalah data dan manajemen data aplikasi.
Tampilan secara efektif menyediakan elemen antarmuka pengguna aplikasi. Ini akan membuat data dari model menjadi bentuk yang cocok untuk antarmuka pengguna.
Pengontrol menerima input pengguna dan membuat panggilan ke objek model dan tampilan untuk melakukan tindakan yang sesuai.
Secara keseluruhan, ketiga komponen ini bekerja bersama untuk membuat tiga komponen dasar MVC.
sumber
Analogi
Saya menjelaskan MVC kepada ayah saya seperti ini:
MVC (Model, View, Controller) adalah pola untuk mengatur kode dalam aplikasi untuk meningkatkan rawatan.
Bayangkan seorang fotografer dengan kameranya di studio. Seorang pelanggan memintanya untuk mengambil foto sebuah kotak.
Kotak adalah model , fotografer adalah pengontrol dan kamera adalah pemandangan .
Karena kotak itu tidak tahu tentang kamera atau fotografer, ia sepenuhnya independen. Pemisahan ini memungkinkan fotografer untuk berjalan di sekitar kotak dan mengarahkan kamera di sudut manapun untuk mendapatkan bidikan / tampilan yang dia inginkan.
Arsitektur non-MVC cenderung terintegrasi dengan erat. Jika kotak, pengontrol, dan kamera adalah objek satu-dan-sama-maka, kita harus memisahkan dan kemudian membangun kembali baik kotak dan kamera setiap kali kita ingin mendapatkan tampilan baru. Juga, mengambil foto akan selalu seperti mencoba mengambil foto selfie - dan itu tidak selalu sangat mudah.
Penjelasan detail
Hanya setelah membaca pertanyaan / jawaban maillist berikut ini saya merasa seperti saya mengerti MVC. Kutipan: https://mail.python.org/pipermail/python-list/2006-January/394968.html
sumber
MVC sebagian besar adalah kata kunci.
Dulu dianggap sebagai pola, tetapi definisi aslinya tahun 1979 telah dibuat-buat, diteruskan, disalahartikan, diambil di luar konteks aslinya. Sudah diredefinisi ke titik mulai menyerupai agama, dan sementara ini pasti membantu kultus kargo mempertahankannya, namanya tidak terkait lagi dengan seperangkat pedoman yang solid . Dengan demikian, itu tidak bisa dianggap sebagai pola lagi.
MVC tidak pernah dimaksudkan untuk menggambarkan aplikasi web.
Atau sistem operasi modern, atau bahasa.
(beberapa di antaranya benar-benar membuat definisi 1979 berlebihan)
Itu dibuat untuk. Dan itu tidak berhasil.
Kita sekarang berurusan dengan hibrida web-mvc cabul yang, dengan status kata kunci yang mengerikan, definisi buruk, dan memiliki programmer semi-buta huruf sebagai target demografis, membuat publikasi yang sangat buruk untuk pola perangkat lunak secara umum.
MVC, dengan demikian, menjadi pemisahan keprihatinan yang disaring untuk orang-orang yang tidak benar-benar ingin terlalu memikirkannya.
Situs web / aplikasi web di tahun 90-an tidak benar-benar digunakan untuk menerapkan pemisahan masalah.
Itu adalah kesalahan kode spaghetti yang tercampur.
Perubahan UI, desain ulang, dan pengaturan ulang data sangat sulit, mahal, panjang, menyedihkan, bernasib buruk.
Teknologi web seperti ASP, JSP dan PHP membuatnya terlalu mudah untuk mencampurkan masalah tampilan dengan data, dan masalah aplikasi. Para pendatang baru di lapangan biasanya mengeluarkan bola-bola kode yang tidak bisa dipisahkan seperti di masa lalu.
Dengan demikian, semakin banyak orang mulai mengulangi "gunakan MVC" dalam loop tanpa akhir di forum dukungan. Jumlah orang meluas ke titik termasuk manajer dan pemasar, (untuk beberapa istilah sudah akrab, dari masa-masa dalam pemrograman gui, di mana polanya masuk akal) dan yang menjadi raksasa dari kata kunci yang harus kita hadapi sekarang .
Menurut akal sehat , bukan metodologi .
Ini adalah titik awal , bukan solusi .
Ini seperti memberi tahu orang untuk menghirup udara, atau membuat kegentingan , bukan obat kanker .
sumber
It's a fancy word for pre-existing concepts that didn't really need one.
Dan pola / arsitektur desain apa yang tidak sesuai dengan deskripsi itu?The data model is handled one way, the view in another, the rest is just named "controller"
+1Cara terbaik untuk mendefinisikannya adalah dengan membuka tulisan asli Trygve Reenskaug , yang menciptakannya: http://heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.html
Makalah ini, khususnya, umumnya dianggap sebagai teks definisi: http://heim.ifi.uio.no/~trygver/1979/mvc-2/1979-12-MVC.pdf
sumber
MVC adalah pola desain yang digunakan untuk mengisolasi logika bisnis dari presentasi.
Ini berbeda dari banyak pola desain lain dengan fakta bahwa biasanya tidak diimplementasikan secara ringkas, tetapi merupakan dasar dari suatu kerangka kerja.
Sementara aplikasi yang menerapkan pola Strategi hanyalah detail kecil tentang itu, mengatakan bahwa aplikasi web menggunakan pola desain MVC sangat menentukan arsitekturnya .
sumber
MVC adalah desain perangkat lunak yang memisahkan komponen sistem atau subsistem berikut:
sumber
Saya akan mengatakan MVC adalah konsep atau keluarga dengan pola yang sama.
Saya pikir artikel ini layak dibaca. Arsitektur GUI oleh Martin Fowler
sumber
Pertama, Anda harus menentukan siapa penanya, dan jawaban seperti apa yang ia cari. Anda merespons pertanyaan ini dengan pertanyaan lain, seperti "Dalam arti apa?"
Anda dapat bertanya apakah mereka merujuk ke MVC secara umum, implementasi tertentu dari MVC (yaitu asp.net MVC, spring MVC, smalltalk MVC, dll.), Apa itu secara teknis, apa secara filisofis (ya, ia memiliki filsafat juga), dll.
Jika ini adalah pertanyaan pada tes, dan Anda tidak bisa meminta penanya untuk mengklarifikasi, maka Anda harus menebak berdasarkan konteksnya.
Jawaban yang bagus dan sederhana adalah:
Anda juga bisa mengatakan:
Tetapi, pada akhirnya, Anda akan dinilai apakah Anda memberikan jawaban yang mereka harapkan. Satu-satunya solusi untuk masalah ini adalah mencari tahu jawaban seperti apa yang mereka harapkan.
sumber
Inilah yang akan saya katakan tentang itu. Saya akan mencoba menjelaskannya dalam hal aplikasi mobile, karena ini adalah yang paling saya kenal dan karena saya pikir saya tidak sepenuhnya memahaminya sebelum mulai melakukan aplikasi mobile.
Mari kita ambil Android sebagai contoh.
Lapisan presentasi, yaitu. antarmuka pengguna dapat (harus, paling sering) ditentukan seluruhnya dalam xml. Untuk mempermudah, misalkan satu file xml menjelaskan satu layar dalam aplikasi. File XML menentukan kontrol, tata letak kontrol, penentuan posisi, warna, ukuran, label string ... semuanya tentang presentasi. Namun ia tidak tahu kapan akan dipanggil, kapan akan diletakkan di layar. Apakah itu tata letak yang berdiri sendiri atau bagian dari tata letak yang lebih besar? Itu dia: PANDANGAN sempurna Anda .
Sekarang, tampilan jelas perlu ditempatkan di layar di beberapa titik, jadi bagaimana seharusnya melakukannya? Your CONTROLLER , di Android disebut Activity. Seperti namanya, aktivitas melakukan beberapa aktivitas. Sekalipun tujuan utamanya adalah untuk menampilkan tampilan yang ditentukan pada langkah 1, ia akan melakukan beberapa tindakan. Jadi, aktivitas mengambil tampilan dan menampilkannya di layar. Karena pandangan tidak tahu apa-apa tentang aktivitas, aktivitas yang sama tidak tahu apa-apa tentang presentasi aktual. Kami (pemrogram) dapat mengatur ulang tata letak tampilan beberapa kali, tanpa mengubah satu baris kode pun dalam aktivitas kami.
Sekarang, tidak ada banyak gunanya dalam menyajikan tata letak xml bagus Anda yang mengkilap dan terdefinisi dengan baik tanpa benar-benar melakukan sesuatu. Katakanlah kita ingin menyimpan data yang dimasukkan oleh pengguna. Aktivitas perlu menangani proses ini mulai dari mengambil data dari pengguna hingga meneruskannya ke orang lain untuk menanganinya (memproses, menyimpannya, menghapusnya). Kepada siapa akan lulus? Nah, untuk MODEL . Saya suka menganggap model sebagai murni. kelas java yang tidak tahu apa-apa tentang konteks aplikasi tempat tinggalnya (dalam praktiknya hampir tidak akan pernah terjadi).
Katakanlah saya memiliki Person kelas yang memiliki tiga properti: nama, alamat, umur. Layout yang didefinisikan XML saya memiliki 3 bidang untuk input pengguna: nama, alamat, usia. Aktivitas saya mengambil tiga nilai dari input pengguna, membuat objek Person baru dan memanggil beberapa metode di atasnya yang tahu bagaimana menangani beberapa logika khusus Person. Itu dia. Model-View-Controller.
sumber
Saya selalu memulai dengan mengatakan kepada mereka bahwa polanya bukan sesuatu yang baru dan telah ada selama bertahun-tahun ... pada saat ini mereka memberi saya pandangan ingin tahu dan BAM !, mereka terpikat:
Dan kemudian saya akan berbicara banyak tentang berbagai poin seperti jawaban sebelumnya, tapi saya pikir ini penting untuk kontekstual, seperti yang dikatakan JB King, ASP.NET MVC dll,
sumber