Ein Leitfaden für Anfänger zur MVC-Architektur in Java

Veröffentlicht: 2018-04-10

Wenn Sie mit der Webentwicklungsszene zu tun haben, ist Ihnen das Akronym „MVC“ sicherlich schon hunderte Male begegnet, wenn nicht öfter. MVC ist heute eines der am meisten diskutierten Designmuster in der Welt der Webprogrammierung, und das zu Recht. In diesem Artikel führen wir Sie durch die Welt der MVC-Architektur. Wir sprechen über die Grundlagen von MVC, seine Vorteile und schließlich über einen einfachen Code, der Ihnen hilft, die Implementierung von MVC in Java klarer zu verstehen.

Inhaltsverzeichnis

Was genau ist die MVC-Architektur?

Bevor wir uns mit den technischen Einzelheiten befassen, lassen Sie uns einige Dinge klarstellen: MVC ist KEIN Entwurfsmuster, sondern eine Möglichkeit, Ihre Anwendungen zu strukturieren. In den letzten Jahren haben die Webanwendungen die MVC-Architektur ausgiebig verwendet, und daher ist es logisch, sie mit einem Entwurfsmuster zu verwechseln, das ausschließlich für Webanwendungen gilt. Lassen Sie uns Ihnen jedoch sagen, dass MVC erstmals 1979 beschrieben wurde – vor der WWW-Ära, als es noch kein Konzept für Webanwendungen gab. Die heute für Webanwendungen verwendete Architektur ist eine Anpassung des ursprünglichen Musters.
Tatsächlich war diese Architektur ursprünglich in den beiden großen Webentwicklungs-Frameworks – Struts und Ruby on Rails – enthalten. Diese beiden Umgebungen ebneten den Weg für die meisten späteren Web-Frameworks – und damit stieg die Popularität dieser Architektur immer weiter an.

Erfahren Sie, wie Sie Anwendungen wie Swiggy, Quora, IMDB und mehr erstellen

Das MVC-Architekturmuster folgt einer elementaren Idee – wir müssen die Verantwortlichkeiten in jeder Anwendung auf der folgenden Grundlage trennen:

  • Modell: Verarbeitet Daten und Geschäftslogik.
  • Ansicht: Präsentiert die Daten dem Benutzer, wann immer er danach gefragt wird.
  • Controller: Unterhält Benutzeranfragen und ruft notwendige Ressourcen ab.

Jede der Komponenten hat einen abgegrenzten Aufgabenbereich, der ein reibungsloses Funktionieren der gesamten Anwendung bei vollständiger Modularität gewährleistet. Lassen Sie uns einen genaueren Blick auf jede dieser Komponenten werfen.

Regler

Der Controller ist so etwas wie der Haushälter der Anwendung – er führt die Koordination zwischen Modell und Ansicht durch, um eine Benutzeranfrage zu erfüllen. Die Benutzeranfragen werden als HTTP-Get- oder -Post-Request empfangen – zum Beispiel, wenn der Benutzer auf ein beliebiges GUI-Element klickt, um eine Aktion auszuführen.
Die Hauptfunktion eines Controllers besteht darin, das Modell anzurufen und mit ihm zu koordinieren, um alle erforderlichen Ressourcen abzurufen, die zum Handeln erforderlich sind. Normalerweise ruft der Controller beim Empfang einer Benutzeranforderung das geeignete Modell für die vorliegende Aufgabe auf.

Modell

Das Modell sind ganz einfach die Daten für unsere Anwendung. Die Daten werden so „modelliert“ , dass sie einfach gespeichert, abgerufen und bearbeitet werden können. Das Modell ist, wie wir Regeln auf unsere Daten anwenden, die schließlich die Konzepte darstellen, die unsere Anwendung verwaltet.
Für jede Softwareanwendung wird alles als einfach zu handhabende Daten modelliert. Was ist ein Benutzer, ein Buch oder eine Nachricht für eine App? Nichts wirklich, nur Daten, die nach bestimmten Regeln verarbeitet werden müssen. Beispielsweise darf das Datum nicht höher als das aktuelle Datum sein, die E-Mail muss das richtige Format haben, der Name darf nicht länger als „x“ Zeichen sein usw.

Wann immer ein Benutzer eine Anfrage vom Controller stellt, kontaktiert er das entsprechende Modell, das eine Datendarstellung dessen zurückgibt, was der Benutzer angefordert hat. Dieses Modell ist für ein bestimmtes Werk gleich, unabhängig davon, wie wir es dem Benutzer anzeigen möchten. Aus diesem Grund können wir jede verfügbare Ansicht zum Rendern der Modelldaten auswählen.
Darüber hinaus enthält ein Modell auch die Logik zum Aktualisieren des relevanten Controllers, wann immer es eine Änderung in den Daten des Modells gibt.

Sicht

Wie der Name schon sagt, ist die Ansicht für das Rendern der vom Modell empfangenen Daten verantwortlich. Möglicherweise gibt es vorgefertigte Vorlagen, in die Sie die Daten einfügen können, und je nach Anforderung können sogar mehrere unterschiedliche Ansichten pro Modell vorhanden sein.

Jede Webanwendung ist unter Berücksichtigung dieser drei Kernkomponenten strukturiert. Es kann einen primären Controller geben, der dafür verantwortlich ist, alle Anfragen zu empfangen und den spezifischen Controller für bestimmte Aktionen anzurufen. Lassen Sie uns die Funktionsweise einer Webanwendung unter der MVC-Architektur anhand eines Beispiels besser verstehen.

Sehen wir uns ein Beispiel an

Nehmen wir als Beispiel einen Online-Schreibwarenladen. Der Benutzer kann Artikel anzeigen, kaufen, Artikel in den Warenkorb legen, Artikel zur aktuellen Bestellung hinzufügen oder sogar Artikel hinzufügen/entfernen (wenn er der Administrator ist).
Sehen wir uns nun an, was passiert, wenn ein Benutzer auf den Titel „Stifte“ klickt, um die Liste der Stifte anzuzeigen.
Unsere Anwendung verfügt über einen speziellen Controller, der alle Abfragen im Zusammenhang mit Stiften verarbeitet. Nehmen wir an, es heißt „pens_controller.php“. Wir werden auch ein Modell haben, das die Daten bezüglich der Stifte speichert, die wir haben – nennen wir es „pens_model.php“. Schließlich haben wir mehrere Ansichten, um die Daten zu präsentieren – eine Liste der Ställe, eine Tabelle mit Ställen, eine Seite zum Bearbeiten der Liste usw.
Die folgende Abbildung zeigt den vollständigen Steuerungsfluss von dem Moment an, in dem ein Benutzer auf „Stifte“ klickt, bis das Ergebnis vor ihm gerendert wird:

Zunächst behandelt die „pens_controller.php“ die Benutzeranfrage (1) als GET- oder POST-Anfrage. Wir können auch eine „index.php“ haben, die der zentrale Controller ist, der bei Bedarf den „pens_controller“ aufruft.
Der Controller prüft dann die Anfrage und die Parameter und ruft das gewünschte Modell auf – in diesem Fall „pens_model.php“. Der Controller fordert das Modell auf, die Liste der verfügbaren Stifte zurückzugeben (2).
Nun durchsucht das Modell die Datenbank nach den notwendigen Informationen (3), wendet bei Bedarf Logiken an und gibt die Daten an den Controller zurück (4).
Der Controller wählt dann eine geeignete Ansicht (5) und präsentiert die Daten (6 und 7). Wenn eine Anfrage von einem Handheld-Gerät kommt, wird eine passende Ansicht verwendet, oder wenn der Benutzer ein bestimmtes Thema ausgewählt hat, wird dessen Ansicht ausgewählt – und so weiter.
So werden Sie Full-Stack-Entwickler

Die Vorteile der MVC-Architektur

Ein häufiges Problem, mit dem Anwendungsentwickler heutzutage konfrontiert sind, ist die Unterstützung verschiedener Gerätetypen. Die MVC-Architektur löst dieses Problem, da Entwickler verschiedene Schnittstellen für verschiedene Geräte erstellen können und der Controller je nachdem, von welchem ​​Gerät die Anforderung erfolgt, eine geeignete Ansicht auswählt. Das Modell sendet unabhängig vom verwendeten Gerät die gleichen Daten, was eine vollständige Konsistenz über alle Geräte hinweg gewährleistet.
Die MVC-Trennung isoliert die Ansicht wunderbar von der Geschäftslogik. Es reduziert auch die Komplexität beim Entwerfen großer Anwendungen, indem es den Code und den Workflow strukturiert hält. Dadurch ist der gesamte Code viel einfacher zu warten, zu testen, zu debuggen und wiederzuverwenden.

Eine einfache Implementierung von MVC mit Java

Wir werden die folgenden drei haben:

    1. StudentObject : das Modell.

    1. StudentView: Klasse anzeigen, um Details auf der Konsole auszudrucken.

  1. StudentController: ein Controller, der Daten in studentObject speichert und StudentView entsprechend aktualisiert

Schritt 1: Erstellen Sie das Modell

 öffentliche Klasse Student {
   private String rollNo ;
   privater Stringname ; _
   
   public String getRollNo () {
      zurückrollenNr ; _
   }
   
   public void setRollNo ( String rollNo ) {
      dies . RollenNr = RollenNr ;
   }
   
   öffentlicher String getName () {
      Rückgabename ; _
   }
   
   public void setName ( Zeichenfolgenname ) { _
      dies . name = name ;
   }
}

Der Code ist selbsterklärend. Es besteht aus Funktionen zum Abrufen/Einstellen von Rollennummern und Namen der Schüler. Nennen wir es „student.java“.
Schritt 2: Erstellen Sie die Ansicht

 öffentliche Klasse StudentView {
   public void printStudentDetails ( String studentName , String studentRollNo ){
      System . aus . println ( "Schüler:" );
      System . aus . println ( "Name: " + studentName );
      System . aus . println ( "Rolle Nr: " + studentRollNo );
   }
}

Dies dient einfach dazu, die Werte auf der Konsole auszugeben. Nennen wir dies „studentView.java“.
Schritt 3: Erstellen Sie den Controller

 öffentliche Klasse StudentController {
   privates Studentenmodell ; _
   private StudentView- Ansicht ;
   öffentlicher StudentController ( Studentenmodell , StudentView - Ansicht ){
      dies . modell = modell ;
      dies . Ansicht = Ansicht ;
   }
   public void setStudentName ( Zeichenfolgenname ) {
Modell . setName ( Name );
   }
   öffentlicher String getStudentName (){
      Rückgabemodell . _ getName ();
   }
   public void setStudentRollNo ( String rollNo ){
Modell . setRollNo ( rollNo );
   }
   öffentlicher String getStudentRollNo (){
      Rückgabemodell . _ getRollNo ();
   }
   public void updateView (){
ansehen . printStudentDetails ( model . getName (), model . getRollNo ());
   }
}

Nennen Sie diese „StudentController.java“. Ein flüchtiger Blick wird Ihnen sagen, dass dieser Controller nur dafür verantwortlich ist, das Modell aufzurufen, um die Daten abzurufen/festzulegen, und dann die Ansicht zu aktualisieren.
Schauen wir uns nun an, wie das alles zusammenhängt.
Schritt 4: Erstellen Sie die Java-Hauptdatei

 öffentliche Klasse MVCPatternDemo {
   public static void main ( String [] args ) {
      //Schülerdatensatz basierend auf seiner Rollennummer aus der Datenbank abrufen
      Schülermodell = retriveStudentFromDatabase ( );
      //Eine Ansicht erstellen: um Schülerdetails auf der Konsole zu schreiben
      StudentView- Ansicht = new StudentView ();
      StudentController Controller = new StudentController ( model , view );
Controller . updateView ();
      // Modelldaten aktualisieren
Controller . setStudentName ( "John" );
Controller . updateView ();
   }
   privater statischer Student retriveStudentFromDatabase (){
      Student Student = neuer Student ();
Schüler . setName ( "Robert" );
Schüler . setRollNo ( "10" );
      Rückkehrstudent ; _
   }
}

Diese heißt „MVCPatternDemo.java“. Wie Sie sehen können, ruft es die Schülerdaten aus der Datenbank oder einer Funktion ab (in diesem Fall verwenden wir eine Funktion zum Festlegen der Werte) und überträgt sie an das Schülermodell. Dann initialisiert es die zuvor erstellte Ansicht.
Darüber hinaus initialisiert es auch unseren Controller und bindet ihn an das Modell und die Ansicht. Die Methode updateView() ist Teil des Controllers, der die Schülerdetails auf der Konsole aktualisiert.
Schritt 5: Testen Sie das Ergebnis
Wenn alles richtig läuft, sollte das Ergebnis sein:

 Student:
Name: Robert
Rolle Nr: 10
Student:
Name: Johannes
Rolle Nr: 10

Wenn Sie dies als Ausgabe erhalten, herzlichen Glückwunsch! Sie haben die MVC-Architektur erfolgreich mit Java implementiert, wenn auch für eine einfache Anwendung. So einfach diese Anwendung auch sein mag, sie reicht aus, um die Leistungsfähigkeit der MVC-Architektur zu demonstrieren.
15 wichtige MVC-Interviewfragen im Frühjahr

Abschluss…
Nach so viel Gesagtem und Getanem ist es heutzutage schwer, die Leistungsfähigkeit der MVC-Architektur in irgendeiner Web-/Desktop-Anwendung mehr hervorzuheben. Es bietet Ihrem Code ein völlig neues Maß an Modularität, das ihn viel besser lesbar und wartbar macht. Wenn Sie also in Ihrer Karriere als Anwendungsentwickler neue Höhen erreichen möchten, sollte es Ihre oberste Priorität sein, sich mit der MVC-Architektur und ihrer Funktionsweise vertraut zu machen.

Melden Sie sich für Software Engineering-Kurse an den besten Universitäten der Welt an. Verdienen Sie Executive PG-Programme, Advanced Certificate-Programme oder Master-Programme, um Ihre Karriere zu beschleunigen.

Schauen Sie doch mal in die Kommentare und lassen Sie uns wissen, wie Ihnen dieser Artikel gefällt!

Werden Sie Full-Stack-Entwickler

UpGrad und IIIT-Bangalores PG-Diplom in Softwareentwicklung
Bewerben Sie sich jetzt für den Master in Software Engineering