MVC si applica solo al web


14

È quasi istantaneo ogni volta che parlo con gli sviluppatori di Model View Controller ( MVC ) dicendo che fai una richiesta a un url che il server costruisce un'entità (MODELLO) e ti fornisce una rappresentazione visiva di quel modello.

  • Quindi questo significa che MVC è solo per il Web o ho incontrato persone che sono solo sviluppatori che impiegano MVC per scrivere applicazioni Web?

  • Ci sono usi per MVC su applicazioni in stile desktop?

  • Io per primo sono un nuovo paradigma e vorrei sapere di qualsiasi super-impostato su MVC


1
hai controllato i wiki dei tag Programmers.SE o Stack Overflow per "mvc"?
moscerino del

3
@gnat sì, l'ho fatto
Deeptechtons,

6
bene allora probabilmente conosci già la risposta alla tua domanda, vero?
moscerino del

4
@gnat seriamente NO, sono totalmente nuovo su MVC (come detto) e non ho mai usato o sentito (alcune orecchie ho avuto) sull'applicazione di MVC alle applicazioni Windows o su un'applicazione che mostra un badge MVC sulla pagina dei download. Scusate se la domanda è stata sciocca ma per me fa un enigma
Deeptechtons il

Ci sono molte buone risorse per imparare la storia di MVC ma vedo molto questo malinteso, quindi ho scritto un bel riassunto sul mio blog blog.kutulu.org/2012/01/mvc-mvp-mvvm-mvpvm-lmnop-wtf .html
KutuluMike

Risposte:


22

MVC è un modello. I pattern si applicano a tutta la programmazione. MVC sembra funzionare molto bene in un contesto Web.

Come sottolinea gnat, dai un'occhiata al tag mvc e vedrai diversi esempi di implementazione.


5
Questa è la chiave. MVC funziona davvero bene nelle applicazioni Web, ed è in effetti una grande parte del motivo per cui i moderni framework basati su MVC (come Rails, Django e ASP.NET MVC) sono così popolari. Funziona anche in altri contesti (come le app desktop), ma è più difficile mantenere una separazione separata di vista e controller, quindi le varianti che rimuovono la separazione dei controller di visualizzazione come Model-delegator (usato da Swing) o cambiano dove si verifica la divisione come Model-View-ViewModel (utilizzato principalmente dalle app .Net WPF) sono più comuni nelle applicazioni desktop.
Kevin Cathcart,

Se guardi la descrizione originale Smalltalk di ciò che fa un controller - traduci l'input dell'utente in messaggi per il modello - Windows stesso è fondamentalmente un grande controller; ecco perché MVC come modello non si adatta molto bene alle applicazioni dell'interfaccia utente di Windows. Ha usato molto di più in UI Frameworks per sistemi non Windows.
KutuluMike,

@MichaelEdenfield Non proprio; puoi fare MVC e WinForms insieme, sebbene MVP sia più popolare lì, ma MVP è comunque una variante di MVC.
Andy,

45

Considerando che MVC è del 1977 e il web è stato inventato solo nel 1991, dovrebbe essere abbastanza ovvio che MVC non è solo per il web.


30
Questo è un buon inizio di risposta, ma ha un sapore amaro in bocca.
Nicolas C.

2
Corretto e snarky. Roba fantastica!
Tom Hawtin: affronta il

1
"Nel 1982 Internet Protocol Suite (TCP / IP) fu standardizzato e fu introdotto il concetto di una rete mondiale di reti TCP / IP completamente interconnesse chiamata Internet." wiki . Se vuoi dire netscape, allora ok ... ma "il web" esisteva prima.
jmq

4
@jmquigley "Internet" e "Web" sono due cose molto diverse.
Eric King,

1
@jmq 1977 però è ANCORA prima del 1982, e come qualcun altro ha sottolineato Web! = Internet. Il web in realtà non esisteva prima del 1991.
Andy,

9

No, lo sviluppo per OS X e iOS utilizza il modello Controller vista modello.


2
Infine, una risposta al primo e al secondo punto senza il commento.
JeffO,

8

Poni la domanda in un ambiente Microsoft e molte persone supporranno che intendi Asp.Net MVC che è un'implementazione MVC specifica per il web.

Sfortunatamente ci sono molte persone che non si rendono conto che si tratta di un'implementazione del modello MVC e pensano che siano termini intercambiabili, il che porta a un'ipotesi di "solo web".


3
+1 questo è il problema con la denominazione di una piattaforma dopo una metodologia. Quando le persone vengono introdotte per la prima volta sulla piattaforma, non riescono a vedere la distinzione.
MattDavey,

@Ozz questo ha spiegato perché altri sviluppatori usano sempre dire sul web quando MVC è l'argomento
Deeptechtons

1
Per favore, smetti di dipingere gli sviluppatori Microsoft come stupidi, grazie.
Andy,

@Andy - quello non è stato lo scontro con gli sviluppatori MS, io stesso sono uno sviluppatore Asp.Net MVC e resto dalla risposta originale. Non ho detto "tutte" le persone, o "tutti" gli sviluppatori .net, solo un'osservazione di un'ipotesi o un errore che ho visto molte persone fare. Grazie.
ozz,

2

Almeno per quanto ne so, la prima implementazione di MVC è stata in Smalltalk. Era decisamente presente in Smalltalk-80. Anche se non ho alcuna documentazione utile per dimostrarlo, credo che (o qualcosa di abbastanza simile) fosse stato in Smalltalk da qualche anno.

La maggior parte dei framework GUI OO ha incluso almeno alcune varianti di MVC. Non sono sicuro, tuttavia, esattamente cosa significherebbe "superset" in questo caso. È un po 'difficile dire se una determinata variante sia un superset, un sottoinsieme o un peer di MVC, ma tenderei a considerare la maggior parte di questi peer.

In ogni caso, molti (la maggior parte?) Di questi sono stati utilizzati per lo sviluppo desktop, non per lo sviluppo web. Grazie ad alcuni vecchi brevetti AT&T, la maggior parte dei sistemi di finestre richiedono programmi per essere in grado di rigenerare viste su richiesta. Questo (quasi) forza almeno un certo grado di separazione tra il codice che mantiene lo stato corrente (il modello) e il codice che mostra quello stato (la vista). Ciò lascia ancora molto spazio per la variazione in 1) il grado in cui la funzionalità del controller è isolata e 2) i dettagli esatti di dove tracciare le linee tra ciascuno dei pezzi principali.


1

No, si applica anche per applicazioni standalone. Esempio Java Swing segue MVC.


1
Perché il downvote della persona lascia vivere!
Deeptechtons,

1

Quindi ci sono molti diversi modelli di design in questo settore.

  • Model View Presenter (mvp)
  • Model View View Presenter (mvvp)
  • Model View Controller
  • Modello 2

e così via. Nel corso degli anni questi sono stati intrecciati, uniti, modificati e applicati in un'ampia varietà di contesti. La parte importante qui è che il modello di progettazione MVC del 1977 è cambiato molto, e non è più il modello di progettazione utilizzato dai framework web lato server. Come esempio nell'implementazione originale di smalltalk, il Modello osserverebbe la vista per le modifiche, il che non è più il caso in quanto il lato server semplicemente non può osservare gli elementi HTML nel browser degli utenti. Se invece la vista cambia, la vista invierà una richiesta al controller che aggiornerà la vista. Anche in questo caso l'implementazione MVC originale non viene seguita, in quanto un aggiornamento del modello implicherebbe che tutte le viste dipendenti dal modello verrebbero aggiornate.

I moderni framework Web seguono una semplice architettura a tre livelli nota anche come architettura Model 2.

Esistono ovviamente esempi di architetture MVC reali sul Web, ma spesso sono solo lato client, collegati a un server che segue l'architettura Model 2, poiché le viste sono xml e json e non sono osservate per le modifiche. Esempi di architetture in mvc puro lato client sono Sencha Touch e Sproutcore.

Se hai MVC nel browser, mvc like sul server e mvc like come livello dati, hai un'implementazione gerarchica di mvc.

Nota. Ho parlato solo di framework web, altre implementazioni di MVC come java swing e Flex presentano altre differenze di implementazione.


Certamente non ha senso il motivo per cui le persone non votano gli altri, se qualcosa non va, per favore, diglielo e dai la possibilità di correggere la loro opinione. Se non hanno conoscenza sull'argomento, un buon insegnante li indirizzerebbe alla fonte giusta e non lo batterà fino a quando non lo imparerà nel modo giusto !!
Deeptechtons,

la domanda presume che mvc e web funzionino bene insieme e supplichi per mvc non web, quindi quando dai solo esempi di mvc in un contesto web: -1
hildred

1

Una cosa che devi sapere è che ci sono tanti gusti di MVC quanti sono i framework che affermano di implementare MVC.

La maggior parte concorda sul fatto che il modello detenga un certo stato e che il rendering lo visualizzi. Ma il controller ha ruoli molto diversi.

In Smalltalk, dove è stato descritto per la prima volta, il modello è il fulcro dell'applicazione, dei dati e dei metodi aziendali. La vista è una rappresentazione grafica dello stato dell'applicazione (aka Model) e il controller gestisce l'input dell'utente, gli eventi del mouse e della tastiera. Il Controller, ad esempio, instrada gli eventi della tastiera all'elemento vista che ha lo stato attivo.

Nelle pagine .jsp, il modello è per lo più dati, la vista esegue il rendering di quel modello in HTML e il controller esegue il routing del modello alla vista corretta per renderlo.

Quindi, per rispondere alla tua domanda, mentre MVC viene utilizzato sia su applicazioni standalone (Java, .Net, Flex) che sul Web (pagine jsp), è una cosa molto diversa. Ciò significa che l'MVC che conosci non viene utilizzato nelle applicazioni autonome.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.