Wie beantworten Sie als seriöser Programmierer die Frage Was ist MVC?
In meinen Augen ist MVC eine Art Nebelthema - und aus diesem Grund können Sie es, wenn Ihr Publikum ein Anfänger ist, in allgemeinen Begriffen beschreiben, die wahrscheinlich nicht kontrovers sind.
Wenn Sie jedoch mit einem sachkundigen Publikum, insbesondere einem Interviewer, sprechen, fällt es mir schwer, eine Richtung zu finden, die nicht die Reaktion "Nun, das stimmt nicht! ..." riskiert. Wir haben alle unterschiedliche Erfahrungen in der Praxis und ich habe nicht zweimal das gleiche MVC-Implementierungsmuster kennengelernt.
Insbesondere scheinen Meinungsverschiedenheiten in Bezug auf Strenge, Komponentendefinition, Teiletrennung (welches Teil passt wohin) usw. zu bestehen.
Also, wie soll ich MVC auf eine Weise erklären , die korrekt, prägnant und unumstritten ist?
quelle
Antworten:
MVC ist eine Softwarearchitektur - die Struktur des Systems -, die die Domänen- / Anwendungs- / Geschäftslogik (was auch immer Sie bevorzugen) vom Rest der Benutzeroberfläche trennt. Dazu wird die Anwendung in drei Teile unterteilt: das Modell, die Ansicht und den Controller.
Das Modell verwaltet grundlegende Verhaltensweisen und Daten der Anwendung. Es kann auf Informationsanfragen reagieren, auf Anweisungen zum Ändern des Status seiner Informationen reagieren und Beobachter in ereignisgesteuerten Systemen sogar benachrichtigen, wenn sich Informationen ändern. Dies kann eine Datenbank oder eine beliebige Anzahl von Datenstrukturen oder Speichersystemen sein. Kurz gesagt, es ist die Daten- und Datenverwaltung der Anwendung.
Die Ansicht stellt effektiv das Benutzeroberflächenelement der Anwendung bereit. Es werden Daten aus dem Modell in ein Formular gerendert, das für die Benutzeroberfläche geeignet ist.
Der Controller empfängt Benutzereingaben und ruft Modellobjekte und die Ansicht auf, um entsprechende Aktionen auszuführen.
Insgesamt bilden diese drei Komponenten zusammen die drei Grundkomponenten von MVC.
quelle
Analogie
Ich erklärte meinem Vater MVC folgendermaßen:
MVC (Model, View, Controller) ist ein Muster zum Organisieren von Code in einer Anwendung, um die Wartbarkeit zu verbessern.
Stellen Sie sich einen Fotografen mit seiner Kamera in einem Studio vor. Ein Kunde bittet ihn, ein Foto von einer Schachtel zu machen.
Die Box ist das Modell , der Fotograf die Steuerung und die Kamera die Ansicht .
Da die Box weder über die Kamera noch über den Fotografen Bescheid weiß , ist sie völlig unabhängig. Durch diese Trennung kann der Fotograf um die Box herumgehen und die Kamera in einem beliebigen Winkel ausrichten, um die gewünschte Aufnahme / Ansicht zu erhalten.
Nicht-MVC-Architekturen sind in der Regel eng miteinander integriert. Wenn die Box, der Controller und die Kamera ein und dasselbe Objekt wären, müssten wir jedes Mal die Box und die Kamera auseinanderbauen, wenn wir eine neue Ansicht erhalten möchten . Außerdem ist das Fotografieren immer so, als würde man versuchen, ein Selfie zu machen - und das ist nicht immer ganz einfach.
Ausführliche Erklärung
Erst nachdem ich die folgende Frage / Antwort gelesen hatte, hatte ich das Gefühl, MVC zu verstehen. Quote: https://mail.python.org/pipermail/python-list/2006-January/394968.html
quelle
MVC ist meist ein Schlagwort.
Früher galt es als Muster, aber seine ursprüngliche Definition von 1979 wurde verworfen, weitergegeben, falsch interpretiert und aus dem ursprünglichen Kontext herausgenommen. Es wurde bis zu dem Punkt falsch definiert, an dem es einer Religion ähnelt, und während dies sicherlich den Frachtkultisten hilft, es zu verteidigen, ist sein Name nicht mehr mit einer Reihe von Richtlinien verbunden . Als solches kann es nicht mehr als Muster angesehen werden.
MVC sollte niemals Webanwendungen beschreiben.
Weder moderne Betriebssysteme noch Sprachen.
(Einige von ihnen haben die Definition von 1979 tatsächlich überflüssig gemacht.)
Es wurde gemacht zu. Und es hat nicht geklappt.
Wir haben es jetzt mit einem obszönen Web-MVC-Hybrid zu tun , der mit seinem schrecklichen Schlagwortstatus, seiner schlechten Definition und der Tatsache , dass Semi-Analphabeten-Programmierer als Zielgruppe fungieren, eine wirklich schlechte Publizität für Softwaremuster im Allgemeinen schafft.
MVC wurde somit zu einer Trennung von Anliegen, die für Leute bestimmt sind, die nicht wirklich zu viel darüber nachdenken wollen.
Websites / Webanwendungen haben in den 90er Jahren die Trennung von Bedenken nicht wirklich angewendet.
Es waren schreckliche Päckchen mit gemischtem Spaghetti-Code.
UI-Änderungen, Redesigns und Datenumstellungen waren unglaublich schwierig, teuer, langwierig, bedrückend und unglückselig.
Webtechnologien wie ASP, JSP und PHP machen es zu einfach, Bedenken in Bezug auf Anzeigen mit Daten und Bedenken in Bezug auf Anwendungen zu vermischen . Neulinge auf dem Gebiet stoßen normalerweise untrennbare Code-Mudballs aus, wie in alten Zeiten.
So begann eine wachsende Anzahl von Leuten, "use MVC" in Endlosschleifen in Supportforen zu wiederholen . Die Zahl der Leute stieg bis hin zu Managern und Marketingfachleuten (zu einigen war der Begriff bereits aus Zeiten der GUI-Programmierung bekannt, in denen das Muster Sinn machte) .
So wie es aussieht, ist es gesunder Menschenverstand , keine Methodik .
Es ist ein Ausgangspunkt , keine Lösung .
Es ist, als würde man den Leuten sagen, sie sollen Luft atmen oder Knirschen machen , nicht als Heilmittel gegen Krebs .
quelle
It's a fancy word for pre-existing concepts that didn't really need one.
Und welches Designmuster / welche Architektur passt nicht zu dieser Beschreibung?The data model is handled one way, the view in another, the rest is just named "controller"
+1Der beste Weg, es zu definieren, ist, zu den Originalschriften von Trygve Reenskaug zu gehen , der es erfunden hat: http://heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.html
Insbesondere dieses Papier wird im Allgemeinen als Definitionstext betrachtet: http://heim.ifi.uio.no/~trygver/1979/mvc-2/1979-12-MVC.pdf
quelle
MVC ist ein Entwurfsmuster, das zum Isolieren der Geschäftslogik von der Präsentation verwendet wird.
Es unterscheidet sich von vielen anderen Entwurfsmustern dadurch, dass es in der Regel nicht prägnant implementiert wird, sondern die Basis eines Frameworks ist.
Während eine Anwendung, die ein Strategiemuster implementiert, nur ein kleines Detail ist, definiert die Aussage, dass eine Webanwendung das MVC-Entwurfsmuster verwendet, ihre Architektur sehr genau .
quelle
MVC ist ein Software-Design, das die folgenden Komponenten eines Systems oder Subsystems trennt:
quelle
Ich würde sagen, MVC ist ein Konzept oder eine Familie ähnlicher Muster.
Ich denke, dieser Artikel ist es wert, gelesen zu werden. GUI-Architekturen von Martin Fowler
quelle
Zunächst müssen Sie feststellen, wer der Fragesteller ist und welche Art von Antwort er sucht. Sie antworten auf diese Frage mit einer anderen Frage wie "In welchem Sinne?"
Sie können fragen, ob sie sich auf MVC im Allgemeinen beziehen, auf eine bestimmte Implementierung von MVC (dh asp.net MVC, Spring MVC, Smalltalk MVC usw.), was es technisch ist, was es philisophisch ist (ja, es hat eine Philosophie auch), etc ..
Wenn dies eine Frage zu einem Test ist und Sie den Fragesteller nicht um Klärung bitten können, müssen Sie anhand des Kontexts raten.
Eine gute, einfache Antwort lautet:
Du kannst auch sagen:
Aber am Ende werden Sie beurteilt, ob Sie die Antwort geben, die sie erwarten. Die einzige Lösung für das Problem ist herauszufinden, welche Art von Antwort sie erwarten.
quelle
Folgendes würde ich dazu sagen. Ich würde versuchen, es in Bezug auf mobile Anwendungen zu erklären, weil es das ist, was ich am besten kenne und weil ich glaube, dass ich es nicht vollständig verstanden habe, bevor ich angefangen habe, mobile Anwendungen zu machen.
Nehmen wir zum Beispiel Android.
Präsentationsschicht, dh. Die Benutzeroberfläche kann (sollte, meistens) vollständig in XML angegeben werden. Nehmen wir der Einfachheit halber an, dass eine XML-Datei einen Bildschirm in der Anwendung beschreibt. In der XML-Datei werden Steuerelemente, Layout der Steuerelemente, Positionierung, Farben, Größe, Zeichenfolgenbezeichnungen usw. in Bezug auf die Präsentation angegeben. Es weiß jedoch nichts darüber, wann es aufgerufen und wann es auf dem Bildschirm platziert wird. Wird es ein eigenständiges Layout oder ein Teil eines größeren Layouts sein? Da haben Sie es: Ihre perfekte Sicht .
Jetzt muss die Ansicht offensichtlich irgendwann auf dem Bildschirm platziert werden. Wie sollte das geschehen? Dein CONTROLLER , in Android Activity genannt. Wie der Name schon sagt, hat Aktivität etwas mit Aktivität zu tun. Selbst wenn der einzige Zweck darin besteht, die in Schritt 1 definierte Ansicht anzuzeigen, wird eine Aktion ausgeführt. Daher ruft die Aktivität eine Ansicht ab und zeigt sie auf dem Bildschirm an. Da die Ansicht nichts über die Aktivität weiß, weiß die Aktivität auch nichts über die tatsächliche Präsentation. Wir (die Programmierer) konnten das Layout der Ansicht mehrmals ändern, ohne auch nur eine Codezeile in unserer Aktivität zu ändern.
Jetzt macht es nicht viel Sinn, Ihr schönes, glänzendes und gut definiertes XML-Layout zu präsentieren, ohne etwas zu tun. Angenommen, wir möchten die vom Benutzer eingegebenen Daten speichern. Die Aktivität muss diesen Prozess angehen, indem sie die Daten vom Benutzer übernimmt und an eine andere Person weitergibt, um sie zu verarbeiten (verarbeiten, speichern, löschen). An wen wird es weitergegeben? Na ja, zu einem MODELL . Ich stelle mir ein Modell gerne als reines Modell vor. Java- Klasse, die nichts über den Anwendungskontext weiß, in dem sie lebt (in der Praxis wird dies so gut wie nie der Fall sein).
Angenommen, ich habe eine Klasse Person mit drei Eigenschaften: Name, Adresse, Alter. Mein XML-definiertes Layout enthält 3 Felder für Benutzereingaben: Name, Adresse, Alter. In meiner Aktivität werden die drei Werte aus der Benutzereingabe übernommen, ein neues Personenobjekt erstellt und eine Methode aufgerufen, die weiß, wie mit einer personenspezifischen Logik umgegangen wird. Hier hast du es. Model View Controller.
quelle
Ich beginne immer damit, ihnen zu sagen, dass das Muster nichts Neues ist und es schon viele Jahre gibt ... an diesem Punkt geben sie mir einen neugierigen Blick und BAM !, sie sind begeistert:
Und dann würde ich ziemlich genau über die verschiedenen Punkte sprechen, wie die vorherigen Antworten, aber ich denke, es ist auch wichtig, kontextbezogen zu sein, wie JB King sagte, ASP.NET MVC usw.
quelle