Gilt MVC nur für das Web

14

Es ist fast und sofort, wenn ich mit Entwicklern über Model View Controller ( MVC ) spreche, dass sie eine Anfrage an eine URL stellen, der Server eine Entität (MODEL) erstellt und Ihnen eine visuelle Darstellung dieses Modells bereitstellt.

  • Bedeutet dies, dass MVC nur für das Web gedacht ist, oder habe ich Leute getroffen, die nur Entwickler sind, die MVC zum Schreiben von Webanwendungen einsetzen?

  • Gibt es Verwendungsmöglichkeiten für MVC in Desktop-Anwendungen?

  • Ich für meinen Teil bin ein Paradigma-Neuling und würde gerne wissen, welche Super-Sets MVC anbietet

Deeptechtons
quelle
1
Haben Sie die Wikis von Programmers.SE oder Stack Overflow auf 'mvc' überprüft?
gnat
3
@ Gnat ja, ich habe
Deeptechtons
6
na dann kennst du wohl schon die antwort auf deine frage oder?
gnat
4
@gnat ernsthaft NEIN, ich bin völlig neu bei MVC (wie angegeben) und habe noch nie gehört oder gehört (einige Ohren habe ich), dass MVC auf Windows-Anwendungen angewendet wird oder dass eine Anwendung verwendet wird, die auf der Downloadseite ein MVC-Abzeichen trägt. Entschuldigung, wenn die Frage dumm war, aber für mich macht es Rätsel
Deeptechtons
Es gibt viele gute Ressourcen, um die Geschichte von MVC zu lernen, aber ich sehe dieses Missverständnis sehr oft
KutuluMike

Antworten:

22

MVC ist ein Muster. Muster gelten für die gesamte Programmierung. MVC funktioniert einfach sehr gut in einem Webkontext.

Wie gnat bemerkt, schauen Sie sich einfach das mvc-Tag an und Sie werden mehrere Beispiele dafür sehen, wie es implementiert wird.

Tom Squires
quelle
5
Das ist der Schlüssel. MVC funktioniert sehr gut in Webanwendungen und ist in der Tat ein großer Grund dafür, dass moderne MVC-basierte Frameworks (wie Rails, Django und ASP.NET MVC) so beliebt sind. Es funktioniert auch in anderen Kontexten (wie Desktop-Apps), aber es ist schwieriger, eine saubere Trennung von Ansicht und Controller beizubehalten, sodass Varianten, die die Trennung zwischen Ansicht und Controller aufheben, wie Model-Delegator (von Swing verwendet) oder ändern, wo die Aufteilung stattfindet wie Model-View-ViewModel (meist von .Net WPF-Apps verwendet) sind in Desktop-Anwendungen häufiger.
Kevin Cathcart
Wenn Sie sich die ursprüngliche Smalltalk-Beschreibung ansehen, die beschreibt, was ein Controller tut - Benutzereingaben in Nachrichten für das Modell übersetzen - Windows selbst ist im Grunde ein einziger großer Controller. Aus diesem Grund passt MVC als Muster nicht sehr gut zu Windows-UI-Anwendungen. Es wird viel häufiger in UI-Frameworks für Nicht-Windows-Systeme verwendet.
KutuluMike
@MichaelEdenfield Nicht wirklich; Sie können MVC und WinForms zusammen ausführen, obwohl MVP dort populärer ist, aber MVP ist trotzdem eine Variante von MVC.
Andy
45

Wenn man bedenkt, dass MVC aus dem Jahr 1977 stammt und das Web erst 1991 erfunden wurde, sollte es ziemlich offensichtlich sein, dass MVC nicht nur für das Web ist.

Jörg W. Mittag
quelle
30
Dies ist ein guter Anfang der Antwort, hat aber einen bitteren Geschmack im Mund.
Nicolas C.
2
Richtig und scharfsinnig. Tolles Zeug!
Tom Hawtin - Tackline
1
"1982 wurde die Internet Protocol Suite (TCP / IP) standardisiert und das Konzept eines weltweiten Netzwerks vollständig miteinander verbundener TCP / IP-Netzwerke, das Internet, eingeführt." wiki . Wenn du netscape meinst, dann ok ... aber "the web" existierte davor.
JMQ
4
@jmquigley "das Internet" und "das Web" sind zwei sehr unterschiedliche Dinge.
Eric King
1
@jmq 1977 ist allerdings NOCH vor 1982, und wie jemand anderes auf Web! = Internet hingewiesen hat. Das Web existierte wirklich NICHT vor 1991.
Andy
9

Nein, bei der Entwicklung für OS X und iOS wird das Model View Controller-Muster verwendet.

Holli
quelle
2
Zum Schluss eine Antwort auf den ersten und zweiten Punkt ohne Kommentar.
JeffO
8

Stellen Sie die Frage in einer Microsoft-Umgebung, und viele Leute gehen davon aus, dass Sie Asp.Net MVC meinen, eine MVC-Implementierung speziell für das Web.

Leider gibt es viele Leute, die nicht erkennen, dass dies eine Implementierung des MVC-Musters ist, und sie denken, dass sie austauschbare Begriffe sind, was zu einer Annahme von "nur Web" führt.

ozz
quelle
3
+1 Dies ist das Problem beim Benennen einer Plattform nach einer Methodik. Wenn Menschen zuerst an die Plattform herangeführt werden, können sie den Unterschied nicht erkennen.
MattDavey
@Ozz dies hat erklärt, warum andere Entwickler immer über das Web sagen, wenn MVC das Thema ist
Deeptechtons
1
Bitte hör auf, Microsoft-Entwickler als dumm zu bezeichnen, danke.
Andy
@Andy - das war kein MS-Entwickler-Bashing, ich bin selbst Asp.Net MVC-Entwickler und stehe zu der ursprünglichen Antwort. Ich habe nicht "alle" Leute oder "alle" .net-Entwickler gesagt, sondern nur die Beobachtung einer Annahme oder eines Fehlers, den viele Leute gemacht haben. Vielen Dank.
ozz
2

Soweit ich weiß, war die erste Implementierung von MVC in Smalltalk. Es war definitiv in Smalltalk-80 vorhanden. Obwohl ich keine Dokumentation zur Hand habe, um dies zu beweisen, glaube ich, dass es bis dahin einige Jahre lang in Smalltalk war (oder so ähnlich).

Die meisten OO-GUI-Frameworks enthalten mindestens eine Variante von MVC. Ich bin mir jedoch nicht sicher, was genau "Obermenge" in diesem Fall bedeuten würde. Es ist ein wenig schwer zu sagen, ob eine bestimmte Variante eine Obermenge, eine Untergruppe oder ein Peer von MVC ist, aber ich würde die meisten von ihnen eher als Peers bezeichnen.

Auf jeden Fall wurden viele (die meisten?) Für die Desktop-Entwicklung verwendet, nicht für die Web-Entwicklung. Dank einiger alter AT & T-Patente benötigen die meisten Fenstersysteme Programme, um bei Bedarf neue Ansichten generieren zu können. Dies erzwingt (fast) zumindest einen gewissen Grad an Trennung zwischen Code, der den aktuellen Status (das Modell) beibehält, und Code, der diesen Status (die Ansicht) anzeigt. Das lässt immer noch viel Spielraum für Variationen in Bezug auf 1) den Grad der Isolation der Reglerfunktionalität und 2) die genauen Details, wo die Linien zwischen den einzelnen Hauptteilen gezogen werden sollen.

Jerry Sarg
quelle
1

Nein, es gilt auch für Standalone-Anwendungen. Beispiel Java Swing folgt MVC.

Seshagiri TV
quelle
1
Warum das downvote die gelassene Person leben!
Deeptechtons
1

Daher gibt es in diesem Bereich viele verschiedene Designmuster.

  • Model View Presenter (mvp)
  • Modellansicht Presenter anzeigen (MVVP)
  • Model View Controller
  • Modell 2

und so weiter. Im Laufe der Jahre wurden diese miteinander verflochten, zusammengefügt, verändert und in einer Vielzahl von Zusammenhängen angewendet. Wichtig dabei ist, dass sich das MVC-Entwurfsmuster von 1977 stark verändert hat und nicht mehr das Entwurfsmuster ist, das von serverseitigen Webframeworks verwendet wird. Als Beispiel in der ursprünglichen Smalltalk-Implementierung würde das Modell die Ansicht auf Änderungen beobachten, was nicht mehr der Fall ist, da die Serverseite HTML-Elemente im Browser des Benutzers einfach nicht beobachten kann. Wenn sich die Ansicht ändert, sendet die Ansicht stattdessen eine Anforderung an die Steuerung, die dann die Ansicht aktualisiert. Auch hier wird die ursprüngliche MVC-Implementierung nicht befolgt, da eine Aktualisierung des Modells bedeuten würde, dass alle vom Modell abhängigen Ansichten aktualisiert würden.

Die modernen Web-Frameworks folgen einer einfachen dreistufigen Architektur, die auch als Modell 2-Architektur bezeichnet wird.

Es gibt natürlich Beispiele für echte MVC-Architekturen im Web, aber diese sind oft nur clientseitig und mit einem Server verbunden, der der Model 2-Architektur folgt, da die Ansichten xml und json sind und nicht auf Änderungen überprüft werden. Beispiele für clientseitige reine MVC-Architekturen sind Sencha Touch und Sproutcore.

Wenn Sie MVC im Browser, MVC wie auf dem Server und MVC wie als Datenebene haben, haben Sie eine hierarchische MVC-Implementierung.

Hinweis. Ich habe nur über Web-Frameworks gesprochen, andere Implementierungen von MVC wie Java Swing und Flex haben andere Implementierungsunterschiede.

Kjaer
quelle
Sicherlich macht es keinen Sinn, warum Leute andere abstimmen. Wenn etwas nicht stimmt, sagen Sie es ihnen und geben Sie ihnen die Möglichkeit, ihre Meinung zu korrigieren. Wenn sie kein Wissen über das Thema haben, würde ein guter Lehrer sie an die richtige Quelle leiten und ihn nicht schlagen, bis er es richtig lernt !!
Deeptechtons
die Frage geht davon aus, dass mvc und Web - Arbeit gut togather und plädiert für nicht Web - mvc, also wenn Sie geben nur Beispiele für mvc in einem Web - Kontext: -1
Hildred
1

Eine Sache, die Sie wissen müssen, ist, dass es so viele MVC-Varianten gibt, wie es Frameworks gibt, die behaupten, MVC zu implementieren.

Die meisten stimmen darin überein, dass das Modell einen bestimmten Status hat und die Ansicht ihn wiedergibt. Der Controller hat jedoch sehr unterschiedliche Rollen.

In Smalltalk, wo es zuerst beschrieben wurde, ist das Modell der Kern Ihrer Anwendung, Daten und Geschäftsmethoden. Die Ansicht ist eine grafische Darstellung des Status der Anwendung (auch bekannt als Modell), und der Controller verwaltet die Benutzereingaben sowie Maus- und Tastaturereignisse. Der Controller leitet beispielsweise Tastaturereignisse an das Ansichtselement weiter, das den Fokus hat.

Auf .jsp-Seiten besteht das Modell hauptsächlich aus Daten, die Ansicht gibt das Modell in HTML wieder und der Controller leitet das Modell an die richtige Ansicht weiter, um es zu rendern.

Um Ihre Frage zu beantworten: MVC wird sowohl in eigenständigen Anwendungen (Java, .Net, Flex) als auch im Web (JSP-Seiten) verwendet. Dies bedeutet, dass die von Ihnen bekannte MVC nicht in eigenständigen Anwendungen verwendet wird.

Florian F
quelle