Erklären Sie den Model View Controller

13

Meine Erfahrung mit der Entwicklung dynamischer Websites beschränkt sich hauptsächlich auf Java-Servlets. Ich habe Tomcat verwendet, um verschiedene Java-Servlets zu entwickeln, und ich würde ohne zu zögern sagen, dass ich sowohl mit dieser Technologie als auch mit clientseitigem HTML / CSS / Javascript für das Front-End einigermaßen vertraut bin.

Wenn ich an "dynamische Website" denke, dann denke ich: Der Benutzer fordert eine URL mit einer Abfragezeichenfolge an, der Server empfängt die Abfrage und gibt dann HTML dynamisch aus, um auf die Abfrage zu antworten. Dies beinhaltet häufig die Kommunikation mit einer Datenbank, um angeforderte Daten zur Anzeige abzurufen. Dies ist im Grunde die Idee hinter der doGetMethode eines Java HttpServlet.

Aber in diesen Tagen höre ich immer mehr von neueren Frameworks wie Django und Ruby on Rails, die alle die "Model View Controller" -Architektur nutzen. Ich habe verschiedene Artikel gelesen , in denen MVC erklärt wird, aber ich habe Probleme, die Vorteile wirklich zu verstehen. Ich verstehe, dass die allgemeine Idee darin besteht, die Geschäftslogik von der Benutzeroberflächenlogik zu trennen, aber ich verstehe nicht, wie sich dies wirklich von der normalen Webprogrammierung unterscheidet. Die Webprogrammierung zwingt Sie naturgemäß dazu, die Geschäftslogik (serverseitige Back-End-Programmierung) von der UI-Programmierung (clientseitiges HTML oder Javascript) zu trennen, da beide in völlig unterschiedlichen Programmierbereichen existieren.

Frage: Was bietet MVC gegenüber so etwas wie einem Java-Servlet und was genau ist MVC und wie unterscheidet es sich von dem, was Sie normalerweise tun würden, um eine dynamische Website mit einem traditionelleren Ansatz wie einem Java-Servlet (oder sogar einem Java-Servlet) zu entwickeln? etwas älteres wie CGI)? Wenn möglich, erläutern Sie MVC anhand eines Beispiels , wie MVC auf den Webentwicklungsprozess angewendet wird und welche Vorteile dies hat.

Channel72
quelle

Antworten:

7

Zuerst denke ich, ist es am besten, über MVC Architecture zu sprechen und dann weiter auf die Art und Weise einzugehen, wie Sie gerade programmieren.

Die MVC-Architektur ist eine Möglichkeit, den Workflow in einem SotFware-System zu organisieren. Betrachten Sie sie als eine vielschichtige Möglichkeit, das Systemverhalten zu implementieren. Diese Schichten sind:

  1. Modell : Stellt Ihr Datenmodell dar, den Systemkern, in dem alle damit verbundenen Informationen lokalisiert werden sollen. Zum Beispiel: Wenn Sie ein Spiel entwerfen möchten, benötigen Sie Spieler, Regeln, Hindernisse und eine Logik, die sich auf die Interaktionen dieser Elemente bezieht, z. B .: Spieler sollten in der Lage sein, Hindernisse zu sortieren, wenn bestimmte Regeln gelten.

    Das Modell ist das erste Modell, an das Sie denken sollten, da es das Zentrum Ihrer Anwendungen sein wird .

  2. Controller : Hier geschieht die Magie, und hier trifft die Layered Architecture auf das objektorientierte Paradigma, das sie verwenden sollte. Hier implementieren Sie, wie das System reagiert, wenn ein Anwendungsbenutzer etwas über die Anwendung über die Benutzeroberfläche anfordert.

    Der Controller sollte in der Lage sein, die Modellobjekte zu handhaben, Operationen mit ihnen durchzuführen, um die vom Benutzer angeforderten Ergebnisse zu erzielen, und das Ergebnis dann an den entsprechenden Ansichts-Layer zu delegieren, um es wieder an unseren Benutzer zu rendern.

  3. Ansicht : Dies ist der Start- und Endpunkt der Benutzerinteraktionen. Hier legen Sie fest, wie Benutzer mit der Anwendung interagieren. Heutzutage ist es weit verbreitet, dass Benutzer versuchen, auf Webanwendungen über verschiedene Medien wie Mobiltelefone, Tabellen, PCs, Laptops usw. zuzugreifen.

    Im Allgemeinen benötigt jede Technologie eine andere Sprache, um die Ansicht zu erstellen. Stellen Sie sich also vor, dass Ihr Datenmodell und die Art und Weise, wie das Modell interagiert und wie Sie diese Interaktionen rendern, alle fest codiert sind. Es gibt absolut keine Möglichkeit, Ihren Code auf eine Art und Weise wiederzuverwenden, die nicht CopyPaste ist . Das Ergebnis ist Code, der riecht und viel Zeit beim Anpassen des HOLE sysmte verschwendet.

    Die Tugend, die Ansicht in einer separaten Ebene zu haben, ermöglicht es uns, unabhängig von dem Modell zu arbeiten, an dem wir gerade arbeiten . Wir müssen nur wissen, wie wir die Liste der Objekte rendern sollen, die der Controller uns sendet. Wie er es hervorgebracht hat, ist völlig unbedeutend

Endlich haben wir ein eigenständiges Modell , das wir an unsere aktuellen Bedürfnisse anpassen können (heute muss ich ein Monouser-Spiel ohne Regeln abwickeln, morgen möchte ich mit Freunden spielen und jetzt mit Multiuser usw.). Das hängt nicht davon ab, wie wir es dem Benutzer rendern. Anschließend verarbeitet ein Controller , der Benutzeranforderungen erfasst, die aus einer Ansicht stammen, Modellobjekte und gibt die Informationen zurück an die Ansicht, um sie zu rendern.

Zurück zur ersten Frage, die Sie gestellt haben: Wie Sie sehen können (ich hoffe), ist MVC ein WEG, Dinge zu tun und keine TECHNOLOGIE, um Software zu erstellen. Sie können Ihre Java-Servlets verwenden und eine MVC-Architektur darunter implementieren.

Hier ist eine Beispielseite für Fragen und Antworten, die eine MVC-Architektur verwendet, um ein wenig zu verdeutlichen Bildbeschreibung hier eingeben

Guiman
quelle
6

Zur Beantwortung Ihrer Frage

What does MVC offer over something like a Java servlet

MVC ist ein Muster, keine Technologie. Das Muster kann also auch beim Programmieren mit Servlets angewendet werden.

Lassen Sie mich versuchen, das MVC-Muster mit Servlets selbst zu erklären. Wenn Sie über die Anwendung von MVC sprechen, trennen Sie das Modell (die Geschäftslogik), die Ansicht (die Präsentationslogik) und den Controller (das Controller-Servlet, das die Steuerung an die entsprechende Geschäftslogik delegiert).

In diesem Fall geht es bei MVC nicht nur darum, das Geschäft von der Präsentations- und der Controllerschicht zu trennen, sondern die Business-Schicht weiß auch nicht, dass ein Controller oder eine Präsentation vorhanden ist.

Wichtige Java-Frameworks wie Struts folgen diesem Muster. Ich denke, Sie haben das Konzept falsch verstanden. Sie können mehr darüber im Internet lesen.

Vinoth Kumar CM
quelle
2

MVC ist wirklich leicht zu verstehen, es ist nur ein Entwurfsmuster, aber ich habe gesehen, dass das Modellteil das schwierigste / übersichtlichste ist.

  • Modell : Ihre Daten (nicht ausschließlich Ihre Datenbank!). Das Modell kann sogar eine INI- oder XML-Datei oder Daten von einem Webdienst sein. Modellklassen dienen zum Definieren, Zusammenstellen und Behandeln von Daten. Lesen Sie den hervorragenden Artikel mit dem Titel " Das M in MVC: Warum Modelle missverstanden und unbeachtet bleiben ". Auf das Modell darf nur der Controller zugreifen.
  • Ansichten : Ihr GUI-Code (Präsentationscode). Sollte nur auf die Steuerung zugreifen
  • Controller : Ihre Logik. Erledigt die Kommunikation zwischen Modell und Ansicht.
dukeofgaming
quelle
1

Das Model-View-Controller- Konzept ist nichts Neues. Es begann mit Smalltalk um 1979.

MVC ist im Kern eine Möglichkeit, die Verantwortlichkeiten Ihres Codes so zu organisieren, dass er modular, vorhersehbar und robust ist.

Die Trennung ermöglicht Ihnen folgende Freiheiten:

  • Möglichkeit, das Modell zu entwickeln, ohne die Anwendungslogik zu beeinträchtigen oder die Daten anzuzeigen
  • Möglichkeit, die Geschäftslogik zu ändern, ohne das Modell zu beeinflussen (dh neue Schritte usw. hinzuzufügen)
  • Möglichkeit, das Modell auf verschiedene Arten darzustellen

Mit Bedacht können Sie das Modell und den Controller möglicherweise so gestalten, dass Sie eine Desktopanwendung vollständig durch eine Webanwendung als Front-End ersetzen können.

In jüngerer Zeit wurden mit dem Ansatz von Ruby on Rails für MVC einige neuere Konzepte eingeführt, die in fast alle Webanwendungs-Frameworks im MVC-Stil kopiert wurden. Dazu gehörten die Konzepte "Konvention über Konfiguration", Zuordnen von Controller-Aktionen zu Klassenmethoden und Weiterleiten von URL-Anforderungen an den zugrunde liegenden Code.

Berin Loritsch
quelle