Apakah MVC hanya berlaku untuk web

14

Hampir dan seketika setiap kali saya berbicara dengan pengembang tentang Model View Controller ( MVC ) mereka mengatakan Anda membuat permintaan ke url server membangun entitas (MODEL) dan memberi Anda representasi visual dari model itu.

  • Jadi apakah ini berarti MVC hanya untuk web atau sudahkah saya bertemu orang-orang yang hanya pengembang yang menggunakan MVC untuk menulis aplikasi web?

  • Apakah ada penggunaan untuk MVC pada aplikasi gaya desktop?

  • Saya baru mengenal paradigma dan ingin mengetahui super-set untuk MVC

Deeptechtons
sumber
1
apakah Anda memeriksa wiki tag tag Programmers.SE atau Stack Overflow untuk 'mvc'?
nyamuk
3
@gnat ya saya lakukan
Deeptechtons
6
baik maka Anda mungkin sudah tahu jawaban atas pertanyaan Anda bukan?
nyamuk
4
@gnat serius TIDAK, saya benar-benar baru ke MVC (sebagaimana dinyatakan) dan tidak pernah menggunakan atau mendengar (beberapa telinga saya dapatkan) tentang MVC yang diterapkan pada aplikasi windows atau menggunakan aplikasi yang memakai lencana MVC pada halaman unduhan. Maaf jika pertanyaan itu bodoh, tetapi bagi saya itu memang teka
Deeptechtons
Ada banyak sumber yang bagus untuk mempelajari sejarah MVC tetapi saya melihat kesalahpahaman ini banyak, jadi saya menulis ringkasan yang bagus di blog blog saya.kutulu.org/2012/01/mvc-mvp-mvvm-mvpvm-lmnop-wtf .html
KutuluMike

Jawaban:

22

MVC adalah sebuah pola. Pola berlaku di semua pemrograman. MVC kebetulan bekerja dengan sangat baik dalam konteks web.

Seperti yang ditunjukkan oleh nyamuk, lihatlah pada tag mvc dan Anda akan melihat beberapa contoh penerapannya.

Tom Squires
sumber
5
Ini kuncinya. MVC bekerja sangat baik dalam aplikasi web, dan memang merupakan sebagian besar alasan mengapa kerangka kerja berbasis MVC modern (seperti Rails, Django, dan ASP.NET MVC) sangat populer. Ini berfungsi dalam konteks lain (seperti aplikasi desktop) juga, tetapi lebih sulit untuk menjaga pemisahan dan pengontrol tampilan yang bersih, sehingga varian yang menghapus pemisahan pengontrol tampilan seperti Model-delegator (digunakan oleh Swing) atau mengubah tempat perpecahan terjadi seperti Model-View-ViewModel (kebanyakan digunakan oleh aplikasi .Net WPF) lebih umum di Aplikasi Desktop.
Kevin Cathcart
Jika Anda melihat deskripsi Smalltalk asli tentang apa yang dilakukan oleh pengontrol - menerjemahkan input pengguna ke dalam pesan untuk model - Windows itu sendiri pada dasarnya adalah satu pengontrol besar; itu sebabnya MVC sebagai pola tidak cocok dengan aplikasi Windows UI. Ini digunakan lebih banyak di Kerangka UI untuk sistem non-Windows.
KutuluMike
@MichaelEdenfield Tidak juga; Anda dapat melakukan MVC dan WinForms bersama-sama, meskipun MVP lebih populer di sana, tetapi MVP adalah varian dari MVC.
Andy
45

Mengingat MVC berasal dari tahun 1977, dan web hanya ditemukan pada tahun 1991, seharusnya cukup jelas bahwa MVC tidak hanya untuk web.

Jörg W Mittag
sumber
30
Ini adalah awal jawaban yang bagus, tetapi memiliki rasa pahit di mulut.
Nicolas C.
2
Benar dan snarky. Barang bagus!
Tom Hawtin - tackline
1
"Pada tahun 1982 Internet Protocol Suite (TCP / IP) distandarisasi dan konsep jaringan di seluruh dunia jaringan TCP / IP yang saling terhubung sepenuhnya yang disebut Internet diperkenalkan." wiki . Jika maksud Anda netscape, maka ok ... tetapi "web" sudah ada sebelumnya.
jmq
4
@ jmquigley "Internet" dan "Web" adalah dua hal yang sangat berbeda.
Eric King
1
@jmq 1977 masih MASIH sebelum 1982, dan seperti orang lain menunjukkan Web! = Internet. Web benar-benar TIDAK ada sebelum tahun 1991.
Andy
9

Tidak, pengembangan untuk OS X dan iOS menggunakan pola Model View Controller.

Holli
sumber
2
Akhirnya, jawaban untuk poin pertama dan kedua tanpa komentar.
JeffO
8

Ajukan pertanyaan di lingkungan Microsoft dan banyak orang akan menganggap Anda maksud Asp.Net MVC yang merupakan implementasi MVC khusus untuk web.

Sayangnya ada banyak orang yang tidak menyadari bahwa ini adalah implementasi dari pola MVC dan menganggapnya sebagai istilah yang dapat dipertukarkan, yang mengarah pada asumsi "hanya web".

ozz
sumber
3
+1 ini adalah masalah dengan penamaan platform setelah metodologi. Ketika orang diperkenalkan ke platform pertama, mereka gagal melihat perbedaannya.
MattDavey
@Ozz ini memang menjelaskan mengapa pengembang lain selalu mengatakan tentang web ketika MVC adalah topiknya
Deeptechtons
1
Tolong berhenti mengecat pengembang Microsoft sebagai bodoh, terima kasih.
Andy
@Andy - itu bukan bashing pengembang MS, saya seorang pengembang Asp.Net MVC sendiri, dan saya mendukung jawaban asli. Saya tidak mengatakan "semua" orang, atau "semua" pengembang. Net, hanya pengamatan asumsi atau kesalahan yang saya lihat banyak orang lakukan. Terima kasih.
ozz
2

Setidaknya sejauh yang saya tahu, implementasi pertama MVC adalah di Smalltalk. Itu pasti hadir di Smalltalk-80. Meskipun saya tidak memiliki dokumentasi yang berguna untuk membuktikannya, saya percaya (atau sesuatu yang sangat mirip) sudah ada di Smalltalk selama beberapa tahun saat itu.

Sebagian besar kerangka kerja OO GUI telah menyertakan setidaknya beberapa varian MVC. Namun, saya tidak yakin persis apa arti "superset" dalam kasus ini. Agak sulit untuk mengatakan apakah varian yang diberikan adalah superset, subset, atau peer dari MVC, tetapi saya cenderung menganggap sebagian besar dari mereka sebaya.

Bagaimanapun, banyak (sebagian besar?) Ini telah digunakan untuk pengembangan desktop, bukan pengembangan web. Berkat beberapa paten AT&T lama, sebagian besar sistem windowing membutuhkan program untuk dapat menghasilkan kembali pandangan tentang permintaan. Ini (hampir) memaksa setidaknya beberapa derajat pemisahan antara kode yang mempertahankan keadaan saat ini (model) dan kode yang menampilkan keadaan itu (tampilan). Itu masih menyisakan banyak ruang untuk variasi dalam 1) sejauh mana fungsi pengontrol terisolasi, dan 2) detail yang tepat dari mana harus menggambar garis antara masing-masing bagian utama.

Jerry Coffin
sumber
1

Tidak, itu berlaku bahkan untuk aplikasi mandiri. Contoh Java Swing mengikuti MVC.

TV Seshagiri
sumber
1
Mengapa downvote membiarkan orang hidup!
Deeptechtons
1

Jadi ada banyak pola desain yang berbeda di area ini.

  • Presenter Tampilan Model (mvp)
  • Model View View Presenter (mvvp)
  • Pengontrol Tampilan Model
  • Model 2

dan seterusnya. Selama bertahun-tahun ini telah terjalin, disatukan, diubah dan diterapkan dalam berbagai konteks. Yang penting di sini, adalah bahwa pola desain MVC dari tahun 1977 telah banyak berubah, dan bukan lagi pola desain yang digunakan oleh kerangka kerja server di sisi server. Sebagai contoh dalam implementasi smalltalk asli Model akan mengamati tampilan untuk perubahan, yang tidak lagi terjadi karena sisi server tidak dapat mengamati elemen html di browser pengguna. Sebaliknya jika tampilan berubah, tampilan akan mengirim permintaan ke controller yang kemudian akan memperbarui tampilan. Sekali lagi implementasi MVC asli tidak diikuti, karena pembaruan untuk model akan menyiratkan bahwa semua tampilan bergantung pada model akan diperbarui.

Kerangka kerja web modern mengikuti arsitektur tiga tingkat sederhana yang juga dikenal sebagai arsitektur Model 2.

Tentu saja ada contoh arsitektur MVC nyata di web, tetapi ini sering hanya sisi klien, terhubung ke server yang mengikuti arsitektur Model 2, karena pandangannya xml dan json, dan tidak diamati untuk perubahan. Contoh arsitektur sisi murni mvc klien adalah Sencha Touch dan Sproutcore.

Jika Anda memiliki MVC di browser, mvc suka di server, dan mvc suka sebagai lapisan data, Anda memiliki implementasi mvc hirarkis.

Catatan. Saya hanya berbicara tentang kerangka kerja web, implementasi lain dari MVC seperti java swing dan Flex memiliki perbedaan implementasi lainnya.

Kjaer
sumber
Tentu saja tidak masuk akal mengapa orang memilih orang lain, jika ada sesuatu yang salah tolong beri tahu mereka & beri kesempatan untuk memperbaiki pandangan mereka. Jika mereka tidak memiliki pengetahuan tentang masalah ini, seorang guru yang baik akan mengarahkan mereka ke sumber yang benar tidak memukulinya sampai dia mempelajarinya dengan benar !!
Deeptechtons
pertanyaannya mengasumsikan bahwa mvc dan web berfungsi dengan baik untuk mengumpulkan dan memohon untuk non web mvc, jadi ketika Anda hanya memberikan contoh mvc dalam konteks web: -1
hildred
1

Satu hal yang harus Anda ketahui adalah bahwa ada banyak rasa MVC karena ada kerangka kerja yang mengklaim untuk mengimplementasikan MVC.

Sebagian besar setuju pada kenyataan bahwa Model memiliki kondisi tertentu dan Tampilan membuatnya. Tetapi Controller memiliki peran yang sangat berbeda.

Di Smalltalk, tempat pertama kali dijelaskan, Model adalah inti dari aplikasi, data, dan metode bisnis Anda. Tampilan adalah representasi grafis dari keadaan aplikasi (alias Model), dan Pengontrol mengelola input pengguna, peristiwa mouse dan keyboard. Pengontrol, misalnya, merutekan acara keyboard ke elemen tampilan yang memiliki fokus.

Di halaman .jsp, Model sebagian besar data, Lihat membuat Model ke HTML dan Controller melakukan routing Model ke Tampilan yang tepat untuk membuatnya.

Jadi, untuk menjawab pertanyaan Anda, sementara MVC digunakan baik pada aplikasi mandiri (Java, .Net, Flex) dan web (halaman jsp), itu adalah hal yang sangat berbeda. Itu berarti MVC yang Anda tahu tidak digunakan dalam aplikasi mandiri.

Florian F
sumber